neo4j 中节点之间的版本控制关系

Versioning relationships between nodes in neo4j

假设有两个节点 A 和 B,

(A)-[r]-(B)

r 有一个 属性 'weight',比方说,这是 A 对 B 的依赖性的度量。

weight的值经常变化,希望对weight的值进行版本化。 在两个相同的节点之间建立新的关系,并在最后创建的关系上添加一个 属性 ['valid': true] 是否可行?

我问这个问题是因为有人告诉我,如果我需要对属性进行版本控制,它们绝对应该是节点:

https://twitter.com/ikwattro/status/746997161645187072

但是,A、B两个节点之间的权值属性自然属于它们之间的关系。如何使用一个节点来维持权重?

编辑:

一个例子: 设 A 是标签为 :FRUIT 的节点,B 是标签为 :PERSON 的节点 进一步,设r为两者之间的关系,标签为:LIKING,r的'weight' 属性表示B对水果A的喜爱程度

r的权重属性一直在变化,需要随着时间对这个属性进行版本化

我认为这取决于两件事:weight 更新的频率和您将 运行 在版本化 weights:

上的查询
  1. 如果您希望更新的数量较少并且仅保留它们以供参考,您可以使用单一关系并将旧值存储在 属性(例如地图甚至一个字符串)。

  2. 如果您希望更新次数较少,并且希望定期查询数据,则每次更新都使用新关系是合理的。

  3. 如果 weight 频繁变化并且您确实需要访问数据(即为数百万个水果收集数百万个重量值),我不会将其存储在 neo4j 中。使用简单的 MySQL table 和 PersonID, FruitID, weight, timestamp 或其他一些数据存储。在 neo4j 中只存储最新的值。

我经常同时使用 2. 和 3.,尽管 3. 听起来有点矫枉过正,但只要您只 'outsource' 具有清晰查询的结构化数据,实施起来通常很简单。