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


72

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

例如,我要以树形结构存储论坛的帖子:

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

1
我的数据模型中有一个类似的问题。Neo4j运作良好,但无法水平缩放。我以为MongoDB会更好,但是由于您不了解顶层的架构就无法检索嵌入式的“原始帖子”元素,因此它实际上不如图形数据库。
Sridhar Sarnobat

4
@ Sridhar-Sarnobat也许未来属于混合数据库,例如OrientDBArrangoDB,它们结合了文档和图形数据库。如今,甚至PostgreSQL也支持JSON文档。
迪蒙(

谢谢你的建议。我将仔细研究这些内容
Sridhar Sarnobat 2013年

4
在过去的一年中,我与Neo4j和OrientDB一起工作,与Mongo或Couch相比,它们都为本文所述的问题类型提供了更好的解决方案。问题真正出在哪里?
orangepips

Answers:


19

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

http://neo4j.com/


3
今天,我看得更清楚了,并同意这是典型的图形结构。当然也可以将其建模为文档或使用关系数据库,但是图形数据库似乎是最合适的。而且,是的,OrientDB绝对值得一看。
deamon

33

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

Java Content Repository(JCR)是消除这些考虑因素的一种标准,Apache JackRabbitJBoss eXo都是实现。请注意,幕后双方仍在进行某种算法计算以保持如上所述的层次结构。此外,JCR还处理权限,文件存储和其他几个方面-因此对于您的项目而言,它可能会显得过大。


指向evolt.org的“平面方法”链接已死。
马修·达顿

@MatthewDutton:固定。
orangepips

JCR的想法很好,但是不幸的是,它有一些怪异之处,使其成为大规模使用的噩梦。有些whitch的是: -它存储在文件系统中,以及在关系数据库中它的数据-它很容易损坏版本历史-硬盘存储一致备份
martyglaubitz





2

图形数据库也可能会解决此问题。如果neo4j不足以进行扩展,请考虑Titan,它基于各种存储后端(包括HBase),并且扩展性很好。它不如neo4j成熟,但它是一个非常有前途的项目。


2

LDAP,显然。OpenLDAP可以简化它。


1

在数学中,更具体地说,在图论中,一棵树是无向图,其中任意两个顶点通过一条路径连接。因此,任何图数据库都可以肯定地完成这项工作。顺便说一句,像树这样的普通图形可以简单地映射到任何关系或非关系数据库。要将分层数据存储到关系数据库中,请看Bill Karwin的精彩演示。也有带有存储树的设施的ORM。例如TypeORM支持邻接表和闭合表模式,用于存储层次结构。

TypeORM用于TypeScript \ Javascript开发。检查流行的ORM,以根据您的环境找到一个支持的树。

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


0

这是您无法解决的问题。SQLServer 2008 !!!! 这对于递归查询非常有用。或者,您可以使用老式的路由并将层次结构数据存储在单独的表中,以避免递归。

我认为关系数据库非常适合树状数据。在查询性能和易用性上。需要注意的是...。您将在有人发表文章时将其插入到索引表中,并且可能还会插入其他几个索引表中。插入性能可能是Facebook口径论坛上的一个问题。


4
作为SQL Server 2008有用的原因,您至少需要在这里谈论Common Table Expressions和/或XML功能。
orangepips 2011年

2
SQL确实具有hierarchid数据类型;但是,SQL缓慢且笨拙。
theMayer 2013年

MySQL 7现在具有类似的功能
尼克

0

查看MarkLogic。您可以从网站下载演示副本。它是用于非结构化数据的数据库,属于数据库的NoSQL分类。我知道非结构化数据是一个很容易理解的术语,但只是将其视为与RDBMS的行和列不太匹配的数据(例如分层数据)。



0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.