我正在评估一个项目的数据库。现在我非常喜欢 Neo4J 的图形特性。
我正在寻找创建一个时间数据库,它使用类似于“最后一个良好价值”的方法(我的话)。
这是一个使用粗略的 Neo4J 伪代码的示例。想象以下作为单独的交易发生。
CREATE (a:Person {first: "Charles", last: "Tolliver", timestamp: timestamp() + 00})
CREATE (b:Person {first: "Charlie", timestamp: timestamp() + 10})
CREATE (c:Person {first: "Chuck", timestamp: timestamp() + 20})
CREATE (d:Person { last: "Peters", timestamp: timestamp() + 30})
CREATE (e:Person {age:42, timestamp: timestamp() + 40})
CREATE (a)<-[:UPDATES]-(b)<-[:UPDATES]-(c)<-[:UPDATES]-(d)<-[:UPDATES]-(e)
RETURN a,b,c,d,e;
然后我希望能够做类似的事情:
MATCH (p:Person)
WHERE p.first="Charles"
return p, collect(
{ first: p.first, last: p.last, age: p.age, timestamp: p.timestamp }
)
我想像这样取回数据:
{ first: "Chuck", last: "Peters, age: 42, timestamp:...}
每个后续插入“掩盖”先前数据的位置。
理想情况下,我希望能够以相同的方式使用各种时间戳进行查询,并在该时间点获取聚合对象的“快照”。
问题:
- 这个模式有我可以研究的名字吗?
- 是否有任何数据库本身/开箱即用地支持这种模式?
- Neo4J 或其他图形数据库中是否有一个干净的范例/工具集?
*注意:出于各种原因,我不喜欢使用基于“帧”的时间性。
注意:我不是在问“哪些数据库最适合这个”或任何主观的东西。我正在寻找有关支持此模式/范式的客观信息。