1

我正在评估一个项目的数据库。现在我非常喜欢 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 或其他图形数据库中是否有一个干净的范例/工具集?

*注意:出于各种原因,我不喜欢使用基于“帧”的时间性。

注意:我不是在问“哪些数据库最适合这个”或任何主观的东西。我正在寻找有关支持此模式/范式的客观信息。

4

1 回答 1

1

由于内置的​​时间性,我最终选择了 Datomic。我非常喜欢它(尤其是 Datalog,它是查询语言)。不过,我确实希望它有更多实用的文档。

于 2014-12-01T16:44:27.143 回答