关于树:什么类型的NoSQL数据库最适合存储分层数据?

What type of NoSQL database is best suited to store hierarchical data?

什么类型的NoSQL数据库最适合存储分层数据?

比方说,我想存储具有树结构的论坛的帖子:

1
2
3
4
5
6
original post
 + re: original post
 + re: original post
   + re2: original post
     + re3: original post
   + re2: original post


MongoDB和CouchDB提供了解决方案,但没有内置功能。关于在关系数据库中表示层次结构,请参阅此SO问题,因为我看到的大多数其他NoSQL解决方案在这方面都相似;您必须编写自己的算法,以便在添加,删除和移动节点时重新计算该信息。一般来说,您要在快速读取时间(例如嵌套集)或快速写入时间(邻接列表)之间做出决定。有关这些方面的更多选项,请参阅上述SO问题 - 平台方法似乎与您的问题最为一致。

确实抽象出这些考虑因素的一个标准是Java内容存储库(JCR),Apache JackRabbit和JBoss eXo都是实现。注意,在幕后,两者仍在进行某种算法计算以维持如上所述的层次结构。此外,JCR还处理权限,文件存储和其他几个方面 - 因此它可能对您的项目来说太过分了。


您可能需要的是面向文档的数据库,如MongoDB或CouchDB。

查看允许您在MongoDB中存储分层数据的不同技术示例:
http://www.mongodb.org/display/DOCS/Trees+in+MongoDB


这是图数据库。
可以用作树数据库。

Neo4j Graph Platform – The Leader in Graph Databases


面对同样的问题,我决定使用Lua + Redis创建我自己的(非常简单的)解决方案https://github.com/qbolec/Redis-Tree/


最常见的是IBM的IMS。还有缓存数据库

看到在stackexchange的dba部分发布的这个问题。


很明显,LDAP。 OpenLDAP可以简化它。


图数据库可能也会解决这个问题。如果neo4j在缩放方面对你来说还不够,可以考虑一下Titan,它基于包括HBase在内的各种存储后端,并且应该可以很好地扩展。它不像neo4j那样成熟,但它是一个非常有前景的项目。


Exist-db为xml持久性实现了分层数据模型


在数学中,更具体地说,在图论中,树是无向图,其中任何两个顶点通过恰好一条路径连接。 因此任何图形数据库都可以确保完成任务。 BTW像树一样的普通图可以简单地映射到任何关系或非关系DB。 要将分层数据存储到关系数据库中,请查看Bill Karwin的这个令人敬畏的演示文稿。 还有ORM设有储存树木的设施。 例如,TypeORM支持用于存储分层结构的Adjacency列表和Closure表模式。

TypeORM is used in TypeScript\Javascript development. Check popular ORMs to find a one supporting trees based on your environment.

非关系数据库之王[恕我直言]是Mongodb。 看看它的文档。 了解它如何存储树木。 树是最常见的图形,它们随处可见。 任何完善的数据库解决方案都应该有办法处理树木。


刚刚在一个培训课程中度过了一个周末,使用MUMUPS db作为完整堆栈javascript浏览器应用程序开发框架的后端。好东西!我建议在GPL下使用MUMPS的GT.M发行版。或者尝试http://sourceforge.net/projects/mumps/?source=recommended用于香草MUMPS。查看http://robtweed.wordpress.com/了解ewd.js js框架以及有关MUMPS的更多信息。


查看MarkLogic。您可以从网站下载演示版。它是非结构化数据的数据库,属于NoSQL数据库分类。我知道非结构化数据是一个非常负载的术语,但只是将其视为不适合RDBMS的行和列(如分层数据)的数据。


这是一个非答案。 SQLServer 2008 !!!!它非常适合递归查询。或者,您可以将旧的路径和存储层次结构数据存储在单独的表中以避免递归。

我认为关系数据库非常适合树数据。无论是查询性能还是易用性。有一点需要注意......每次有人发帖时,你都会插入一个索引表,也可能插入其他几个索引表。插入性能可能是Facebook口径论坛上的一个问题。