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

时间:2011-01-22 13:03:29

标签: database tree nosql hierarchical-data

哪种类型的NoSQL数据库最适合存储分层数据?

例如,我想存储具有树结构的论坛的帖子:

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

13 个答案:

答案 0 :(得分:31)

MongoDB和CouchDB提供解决方案,但没有内置功能。在representing hierarchy in a relational database上看到这个问题,因为我见过的大多数其他NoSQL解决方案在这方面都是相似的;您必须编写自己的算法,以便在添加,删除和移动节点时重新计算该信息。一般来说,您要在快速阅读时间(例如nested set)或快速写入时间(adjacency list)之间做出决定。请参阅上述SO问题,了解更多选项 - flat table approach似乎与您的问题最为一致。

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

答案 1 :(得分:17)

您可能需要的是面向文档的数据库,例如MongoDBCouchDB

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

答案 2 :(得分:16)

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

http://neo4j.com/

答案 3 :(得分:3)

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

答案 4 :(得分:3)

答案 5 :(得分:2)

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

答案 6 :(得分:2)

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

答案 7 :(得分:2)

显然是

LDAP。 OpenLDAP可以简化它。

答案 8 :(得分:1)

In mathematics, and, more specifically, in graph theory, a tree is an undirected graph in which any two vertices are connected by exactly one path。因此,任何graph db都可以做到。顺便说一句,像树这样的普通图形可以简单地映射到任何关系或非关系数据库。要将分层数据存储到关系数据库中,请看Bill Karwin的出色演示。也有带有存储树的设施的ORM。例如,TypeORM支持邻接表和闭包表模式,用于存储层次结构。

  

TypeORM用于TypeScript \ Javascript开发。 Check popular ORMs根据您的环境找到一棵支持树。

非关系型数据库[IMHO]的国王是Mongodb。看看它是documentation。找出如何储存树木。树是最常见的图形,它们在任何地方都可以使用。任何完善的数据库解决方案都应具有处理树的方法。

答案 9 :(得分:0)

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

答案 10 :(得分:0)

Amazon Web Service的简单存储服务(AWS S3)是对分层数据提供本地支持的NoSql存储服务。基于路径的键本质上是分层的,并且可以使用属性(MIME类型,例如application / json,text / csv等)键入Blob值。 S3的优点包括能够扩展到极大的整体容量,版本控制以及几乎无限的并发写入。缺点包括不支持条件写入(乐观并发)或一致读取(仅用于事后读取),也不支持引用/关系。它也是纯粹基于使用情况的,因此需求的广泛差异不需要复杂的扩展基础架构或容量过大的需求。

答案 11 :(得分:0)

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

答案 12 :(得分:0)

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

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