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
:
上的查询
如果您希望更新的数量较少并且仅保留它们以供参考,您可以使用单一关系并将旧值存储在 属性(例如地图甚至一个字符串)。
如果您希望更新次数较少,并且希望定期查询数据,则每次更新都使用新关系是合理的。
如果 weight
频繁变化并且您确实需要访问数据(即为数百万个水果收集数百万个重量值),我不会将其存储在 neo4j 中。使用简单的 MySQL table 和 PersonID, FruitID, weight, timestamp
或其他一些数据存储。在 neo4j 中只存储最新的值。
我经常同时使用 2. 和 3.,尽管 3. 听起来有点矫枉过正,但只要您只 'outsource' 具有清晰查询的结构化数据,实施起来通常很简单。
假设有两个节点 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
:
如果您希望更新的数量较少并且仅保留它们以供参考,您可以使用单一关系并将旧值存储在 属性(例如地图甚至一个字符串)。
如果您希望更新次数较少,并且希望定期查询数据,则每次更新都使用新关系是合理的。
如果
weight
频繁变化并且您确实需要访问数据(即为数百万个水果收集数百万个重量值),我不会将其存储在 neo4j 中。使用简单的 MySQL table 和PersonID, FruitID, weight, timestamp
或其他一些数据存储。在 neo4j 中只存储最新的值。
我经常同时使用 2. 和 3.,尽管 3. 听起来有点矫枉过正,但只要您只 'outsource' 具有清晰查询的结构化数据,实施起来通常很简单。