我有一个数据建模问题。我拥有的数据基本上是与其他节点有关系的节点。节点具有属性。边缘是方向性的并且具有属性。我正在探索像Neo4j这样的图形数据库是否合适。
怀疑是因为:我拥有的数据是基于时间的。它会根据时间而变化,我也需要跟踪历史数据。例如,我应该能够查询:
我搜索但找不到令人满意的资源,我可以理解如何将时间考虑到Graph DB中。您认为使用Graph DB可以固有地满足我的要求吗?是否有一个示例/资源/文章描述了Neo4j或任何其他图形数据库?
我想确保数据库可以扩展到大约100K节点和数百万个边缘。我正在优化太空时间。
是否有一个示例/资源/文章描述了Neo4j或任何其他图形数据库?
Here is是Ian Robinson博客关于基于时间的版本图的优秀文章。
基本上,本文描述了一种表示基于时间的版本化图形的方法,该图形添加了一些额外的节点和时间戳关系,以表示给定时间戳中图形的状态。
参考文章中的以下图片显示:
produc_id : 1
的价格已从1.00变为2.00。这是一个状态变化。product_id : 1
现在由shop_id : 2
(而不是shop_id : 1
)出售。这是一种结构性变化。您认为使用Graph DB可以固有地满足我的要求吗?
是的,但不是一种简单或“自然”的方式。使用不提供此功能的数据库对基于时间的模型进行版本控制可能很困难且成本高昂。来自文章:
Neo4j在其标记属性图模型级别或其Cypher查询语言版本中不提供内在支持。因此,要对图形进行版本化,我们需要使应用程序图形数据模型和查询版本感知。
和
版本控制必然会创建更多数据 - 更多节点和更多关系。此外,查询往往更复杂,更慢,因为每个MATCH必须考虑一个或多个版本化元素。鉴于这些开销,请小心应用版本控制。也许并非所有图表都需要进行版本控制。如果是这种情况,请仅显示图表中需要它的那些部分。
编辑:
图谱数据库(由Ian Robinson,Jim Webber和Emil Eifrem撰写)关于图形数据库中的版本控制的几句话。这本书是available for download at Neo4J page:
版本控制:版本化图表使我们能够在特定时间点恢复图形的状态。大多数图形数据库不支持版本控制作为一流的概念。但是,可以在图模型中创建版本控制方案。使用此方案,节点和关系在被修改时被加上时间戳和存档这种版本控制方案的缺点是它们会泄漏到针对图形编写的任何查询中,即使是最简单的查询也会增加一层复杂性。
本段链接了本答复开头所示的文章。