Какой тип базы данных NoSQL лучше всего подходит для хранения иерархических данных?

какой тип базы данных NoSQL лучше всего подходит для хранения иерархических данных?

скажем, например, я хочу хранить сообщения форума с древовидной структурой:

original post
 + re: original post
 + re: original post
   + re2: original post
     + re3: original post
   + re2: original post

11 ответов


это база данных graph. Может использоваться как база данных дерева.

http://neo4j.com/


MongoDB и CouchDB предлагают решения, но не встроенные в функциональность. См. этот вопрос SO на представление иерархии в реляционной базе данных как и большинство других решений NoSQL, которые я видел, похожи в этом отношении; где вы должны написать свои собственные алгоритмы для пересчета этой информации по мере добавления, удаления и перемещения узлов. Вообще говоря, вы принимаете решение между быстрым временем чтения (например,тупо набор) или быстрое время записи (смежности список). См. вышеупомянутый вопрос SO для получения дополнительных опций по этим строкам -плоский стол подход кажется наиболее согласованным с вашим вопросом.

один стандарт, который абстрагирует эти соображения, - это Репозиторий Содержимого Java (JCR), оба Apache Зайца и С JBoss экзо реализации. Обратите внимание, что за кулисами оба все еще делают какие-то алгоритмические вычисления для поддержания иерархии как описанный выше. Кроме того, JCR также обрабатывает разрешения, хранилище файлов и некоторые другие аспекты, поэтому это может быть излишним для вашего проекта.


возможно, вам нужна база данных, ориентированная на документы, например MongoDB или CouchDB.

посмотреть примеры различных методов, которые позволяют хранить иерархические данные в MongoDB: http://www.mongodb.org/display/DOCS/Trees+in + MongoDB


наиболее распространенным является IMS IBM.Существует также Кэш Базы Данных

посмотреть этот вопрос размещен в разделе dba stackexchange.


столкнувшись с той же проблемой, я решил создать свое собственное (очень простое) решение, используя Lua + Redishttps://github.com/qbolec/Redis-Tree/


Exist-db реализована иерархическая модель данных для сохраняемости xml


Graph databases, вероятно, также решит эту проблему. Если neo4j недостаточно для вас с точки зрения масштабирования, рассмотрите Титан, который основан на различных хранилищах, включая HBase, и должен очень хорошо масштабироваться. Он не такой зрелый, как neo4j, но это очень перспективный проект.


LDAP, очевидно. OpenLDAP быстро справится с этим.


проверить MarkLogic. Вы можете скачать демо-копию с сайта. Это база данных для неструктурированных данных и подпадает под классификацию баз данных NoSQL. Я знаю, что неструктурированные данные-довольно загруженный термин, но просто подумайте об этом как о данных, которые не вписываются в строки и столбцы СУБД (например, иерархические данные).


просто провел выходные на учебном курсе, используя mumups db в качестве бэк-энда для полной платформы разработки приложений браузера javascript. Отличная штука! Я бы рекомендовал GT.M дистрибутив свинки под GPL. Или попробуйте http://sourceforge.net/projects/mumps/?source=recommended для ванильной свинки. Проверьтеhttp://robtweed.wordpress.com/ для ewd.JS JS framework и дополнительная информация о свинке.


вот это не ответ для вас. От SQLServer 2008!!!! Он отлично подходит для рекурсивных запросов. Или вы можете пойти по старому маршруту и сохранить данные иерархии в отдельной таблице, чтобы избежать рекурсии.

Я думаю, что реляционные базы данных очень хорошо подходят для данных дерева. Как в производительности запросов, так и в простоте использования. С одной оговоркой.... вы будете вставлять в индексированную таблицу и, вероятно, несколько других индексированных таблиц каждый раз, когда кто-то делает сообщение. Представление вставки смогло быть вопрос на форуме калибра facebook.