基于时间的图形数据建模

Bon*_*255 6 neo4j graph-databases

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

怀疑是因为:我拥有的数据是基于时间的。它随时间变化,我也需要跟踪历史数据。例如,我应该能够查询:

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

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

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

Bru*_*res 5

是否有一个示例/资源/文章描述了 Neo4j 或任何其他图形数据库?

这是来自 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 着)一书中关于图数据库中版本控制的几句话。本书可在 Neo4J 页面下载

版本控制: 版本化图使我们能够在特定时间点恢复图的状态。大多数图形数据库不支持版本控制作为一流的概念。但是,可以在图形模型中创建版本控制方案。使用这种方案时,节点和关系会在修改时加上时间戳和存档。这种版本控制方案的缺点是它们会泄漏到针对图编写的任何查询中,即使是最简单的查询也增加了一层复杂性。

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

  • @BenjaminR幸运的是有一个网络档案:https://web.archive.org/web/20180123143004/http://iansrobinson.com/2014/05/13/time-based-versioned-graphs/ (5认同)