【问题标题】:Time Based Graph Data Modeling基于时间的图数据建模
【发布时间】:2017-04-30 23:38:33
【问题描述】:

我有一个数据建模问题。我拥有的数据基本上是与其他节点有关系的节点。节点具有属性。边缘是有方向的并且具有属性。我正在探索像 Neo4j 这样的 Graph DB 是否合适。

怀疑是因为:我拥有的数据是基于时间的。它会随着时间而变化,我还需要跟踪历史数据。例如,我应该可以查询:

  1. 特定日期的图表是什么样的?
  2. 给定节点在特定时间都依赖于谁?
  3. 在特定时间两个给定节点之间的边的属性是什么?

我进行了搜索,但找不到令人满意的资源,我可以在其中了解如何将时间因素计入 Graph DB。您认为我的要求可以使用 Graph DB 来满足吗?是否有示例/资源/文章描述了 Neo4j 或任何其他图形数据库?

我想确保数据库可扩展到大约 10 万个节点和数百万条边。我正在优化时间而不是空间。

【问题讨论】:

    标签: neo4j graph-databases


    【解决方案1】:

    是否有描述 Neo4j 的示例/资源/文章或 还有其他图表数据库吗?

    Here is 来自 Ian Robinson 博客的一篇关于基于时间的版本化图的优秀文章。

    基本上,这篇文章描述了一种表示基于时间的版本图的方法,它添加了一些额外的节点和时间戳关系来表示图在给定时间戳中的状态。

    参考文章中的以下图片显示:

    1. produc_id : 1 的价格已从 1.00 更改为 2.00。这是状态变化。
    2. product_id : 1 现在由shop_id : 2 出售(而不是shop_id : 1)。这是一种结构性变化。

    您认为使用 Graph DB 可以满足我的要求吗?

    是的,但不是以简单或“自然”的方式。使用本机不提供此功能的数据库对基于时间的模型进行版本化可能既困难又昂贵。来自文章:

    Neo4j 在其级别上也不提供内在支持 标记的属性图模型或其 Cypher 查询语言 版本控制。因此,要对图表进行版本化,我们需要制作我们的 应用程序图数据模型和查询版本感知。

    版本控制必然会产生更多的数据——更多的节点和 更多的关系。此外,查询往往会更复杂, 而且更慢,因为每个 MATCH 都必须考虑一个或多个 版本化的元素。考虑到这些开销,请谨慎应用版本控制。 也许不是所有的图表都需要版本化。如果那是 在这种情况下,仅对图表中需要它的部分进行版本化。

    编辑:

    Graph Databases(Ian Robinson、Jim Webber 和 Emil Eifrem 所著)一书中关于图形数据库版本控制的几句话。这本书是available for download at Neo4J page

    版本控制: 版本化图使我们能够恢复 特定时间点的图表。大多数图形数据库没有 支持版本控制作为一流的概念。然而,有可能 在图模型中创建版本控制方案。有了这个方案 节点和关系在任何时候都带有时间戳和存档 修改了这种版本控制方案的缺点是它们泄漏 到针对图编写的任何查询中,添加一层 即使是最简单的查询也很复杂。

    本段链接了此答案开头指出的文章。

    【讨论】:

    猜你喜欢
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 2019-04-28
    • 2021-03-02
    • 2021-03-26
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多