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

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

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

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

Ответы [ 12 ]

31 голосов
/ 23 января 2011

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

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

17 голосов
/ 22 января 2011

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

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

16 голосов
/ 01 апреля 2015

Это графическая база данных. Может использоваться как древовидная база данных.

http://neo4j.com/

3 голосов
/ 17 марта 2013

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

3 голосов
/ 03 марта 2011

Наиболее распространенным является IMS IBM . Также имеется База данных кэша

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

2 голосов
/ 19 июня 2014

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

2 голосов
/ 13 апреля 2014

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

2 голосов
/ 13 апреля 2011

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

1 голос
/ 13 марта 2019

В математике, а точнее в теории графов, дерево - это неориентированный граф, в котором любые две вершины соединены ровно одним путем .Так что любой graph db точно сделает эту работу.Кстати, обычный граф, такой как дерево, может быть просто отображен на любую реляционную или нереляционную БД.Чтобы сохранить иерархические данные в реляционной базе данных, взгляните на эту удивительную презентацию Билла Карвина .Есть также ОРМ со средствами для хранения деревьев.Например, TypeORM поддерживает список смежности и шаблоны таблиц закрытия для хранения иерархических структур.

TypeORM используется в разработке TypeScript \ Javascript. Проверьте популярные ORM , чтобы найти одно поддерживающее деревья в зависимости от вашей среды.

Король нереляционных БД [IMHO] - Mongodb.Проверьте это документация .чтобы узнать, как он хранит деревья.Деревья - самый распространенный вид графиков, и они используются везде.Любое хорошо зарекомендовавшее себя решение БД должно иметь способ работы с деревьями.

0 голосов
/ 12 июня 2014

Только что провел выходные на учебном курсе, используя MUMUPS db в качестве бэк-энда для полнофункционального фреймворка для разработки приложений на JavaScript.Качественный товар!Я бы порекомендовал GT.M дистрибутив MUMPS под GPL.Или попробуйте http://sourceforge.net/projects/mumps/?source=recommended для ванильного MUMPS.Проверьте http://robtweed.wordpress.com/ для ewd.js JS Framework и дополнительную информацию о MUMPS.

...