为了跟踪合同变更的历史记录,我正在逐渐摆脱目前的版本,这个版本正在每次更改时创建。更改(续订合同)涉及删除旧关系(不删除任何节点),插入新的当前版本节点以及创建新关系。我认为这一切都发生在一次交易中。如果客户端在发生更改时尝试访问当前版本,客户端是否会请求...
在下面的示例代码中,我们有一名教练和一名运动员,他们在每年年初续签联合合同。如果您运行第一个查询一次,第二个查询多次运行,它将构建此模型。我不知道如何最终测试这种竞争情况。
//INITIALIZE FIRST CONTRACT
CREATE (coach:PERSON {name:'coach'})
CREATE (athlete:PERSON {name:'athlete'})
CREATE (curr:CONTRACT {name:'contract', year:2017, content: "The signees herein..."})
MERGE (coach)-[:BOUND_TO]->(curr)<-[:BOUND_TO]-(athlete)
//RENEW CONTRACT
MATCH (coach:PERSON {name:'coach'} )
MATCH (athlete:PERSON {name:'athlete'} )
MATCH (coach)-[r1:BOUND_TO]->(curr)<-[r2:BOUND_TO]-(athlete)
MERGE (coach)-[:BOUND_TO]->(new:CONTRACT {name:'contract', year:curr.year + 1, content: "The signees herein..."})<-[:BOUND_TO]-(athlete)
MERGE (new)-[:PREV]->(curr)
DELETE r1,r2
Neo4j是一个完整的ACID数据库,因此您的问题将取决于实现提交的时间: