2013-07-17 30 views
2

我的应用程序数据包含一个巨大的树,随着用户与系统交互而增长。图形数据库比key-val商店更适合存储大树吗?可扩展性的损失(对于图形dbs通常更难分割)由其他功能补偿?图形数据库是否比keyval存储更适合存储树?

+0

我很惊讶,没有人提到文件的数据库,如蒙戈DB。或者,也许这只是一种键值存储?根据我的经验,文档数据库不是存储树的答案,因为如果不将整个文档树读入内存,就无法访​​问内部节点。我希望有一天有人想出一个NoSQL树数据库。 –

回答

4

这要看情况。

如果你使用一个关键值存储,我会想象你会为孩子做很多查找,这可能是一个很长的列表,所以你的关键应该是父节点,并且你的价值是孩子,你可能会有很多动作和查询桌子。这通常是您在关系数据库中存在的问题,即这些类型的表连接。

图形数据库是伟大的,因为你不做连接,但遍历,所以你会开始在根,并指定深度,或结束条件,然后你可以让图遍历使用传出关系,让你你的最终结果。

我同意你的看法分片不是图形数据库一个不错的选择,至少不能跨店关系遍历的感觉。但我相信,对数据进行适当的建模,这应该不成问题,至少在图数据库很聪明的情况下不会有问题。

的Neo4j有密集的节点,其中有许多(500K +)关系的节点可能会导致慢下来遍历一个问题,但你可以使用索引解决此问题得到。除此之外,对于大型数据来说它非常棒,因为它在磁盘上的存储效率很高,并且遍历速度非常快。

+1

@Viclib也许看看Titan会有帮助,而不是Neo4J。它专注于使用像HBase或Cassandra这样的后端存储进行分片。 – LMeyer

+0

是的,这将是一个替代方案,但我只熟练Neo4j。 Titan是否通过键/值配对来实现节点/关系连接? – Nicholas

+0

从未使用过它。我知道节点基本上是K/V的集合,但不确定关系。这似乎是这样看的文档时:https://github.com/tinkerpop/blueprints/wiki/Property-Graph-Model“每条边从关键值映射定义的属性的集合。” – LMeyer

1

定义 “巨大的”。如果你能适应Neo4J的限制/限制或者有一个自然的和合乎逻辑的分片模型,Neo4J将是一个更简洁/更简单/更强大的方法,并且需要更少的代码。正如尼古拉斯所说,如果你的数据库会有很多“热点”节点(很多关系),你可能会遇到一些挑战,但是通常你可以使用应用程序设计方法来解决这个限制。

相关问题