用于“数据屏蔽”的时态Neo4J数据库

时间:2014-07-22 22:29:13

标签: design-patterns neo4j graph-databases temporal-database data-masking

我正在评估项目的数据库。现在我非常喜欢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:...}

每个后续插入&#34;掩盖&#34;以前的数据。

理想情况下,我希望能够以相同的方式查询各种时间戳,并获得快照&#34;当时的聚合对象。

问题:

  • 这种模式是否有我可以研究的名称?
  • 是否存在本地/开箱即用的支持此模式的数据库?
  • 在Neo4J或其他图表数据库中是否有一个干净的范例/工具集?

*注意:出于各种原因,我不想使用基于框架的时间性。

注意:我不是要问&#34;哪些数据库最好?&#39;对于这个&#34;或任何主观的。我正在寻找关于支持这种模式/范例的客观信息。

1 个答案:

答案 0 :(得分:1)

由于内置的​​时间性,我最终选择了Datomic。我很享受它(特别是Datalog,它的查询语言)。但我希望它有更实用的文档。