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