【问题标题】:Are graph databases better suited to store trees than key-val stores? [closed]图数据库比 key-val 存储更适合存储树吗? [关闭]
【发布时间】:2013-07-15 16:32:45
【问题描述】:

我的应用程序数据由一棵随着用户与系统交互而增长的巨大树组成。图数据库比 key-val 存储更适合存储大树吗?可扩展性的损失(因为事实图数据库通常更难分片)是否被其他功能补偿?

【问题讨论】:

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

标签: graph nosql neo4j scalability graph-databases


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    这取决于。

    如果你使用键值存储,我想你会为孩子做很多查找,这可能是一个很长的列表,所以你的键是父节点,你的价值是孩子,你最终可能会导致表的大量移动和查询。这通常是您在关系数据库(这些类型的表连接)中遇到的问题。

    图数据库很棒,因为您不进行连接,而是进行遍历,因此您将从根开始,并指定深度或结束条件,然后您可以让图遍历使用传出关系将您带到您的最终结果。

    我同意你的观点,分片对于图数据库来说不是一个好的选择,至少在跨存储关系遍历的意义上不是。但是我相信通过对数据进行适当的建模,这应该不是问题,至少在图形数据库很智能的情况下不会。

    Neo4j 存在密集节点的问题,其中具有许多 (500k+) 关系的节点可能会导致遍历速度变慢,但您可以使用索引来解决此问题。除此之外,它非常适合大数据,因为它在磁盘上的存储效率很高,而且它的遍历速度非常快。

    【讨论】:

    • @Viclib 也许看看 Titan 会有所帮助,而不是 Neo4J。它专注于使用 HBase 或 Cassandra 等后端存储进行分片。
    • 是的,这将是一个替代方案,虽然我只精通 Neo4j。 Titan 是否通过键/值配对进行节点/关系连接?
    • 也没用过。我知道节点基本上是 K/V 集,但不确定关系。查看文档时似乎就是这种情况:github.com/tinkerpop/blueprints/wiki/Property-Graph-Model“每条边都有一组属性,由从键到值的映射定义。”
    猜你喜欢
    • 2011-03-17
    • 2019-02-09
    • 2014-03-13
    • 2013-09-20
    • 2014-07-17
    • 2013-03-12
    • 1970-01-01
    • 2014-09-12
    • 2017-02-03
    相关资源
    最近更新 更多