Neo4j锁定策略是否阻止用户访问在同一时刻重新定位的节点?

问题描述 投票:1回答:1

为了跟踪合同变更的历史记录,我正在逐渐摆脱目前的版本,这个版本正在每次更改时创建。更改(续订合同)涉及删除旧关系(不删除任何节点),插入新的当前版本节点以及创建新关系。我认为这一切都发生在一次交易中。如果客户端在发生更改时尝试访问当前版本,客户端是否会请求...

  1. 找不到节点或其内容?
  2. 找到合同节点的先前版本?
  3. 找到合同节点的新版本?

在下面的示例代码中,我们有一名教练和一名运动员,他们在每年年初续签联合合同。如果您运行第一个查询一次,第二个查询多次运行,它将构建此模型。我不知道如何最终测试这种竞争情况。

contract history tail

//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 transactions locking cypher blocking
1个回答
0
投票

Neo4j是一个完整的ACID数据库,因此您的问题将取决于实现提交的时间:

  • 在提交之前:用户将找到以前的版本
  • 提交后:用户将找到新版本
© www.soinside.com 2019 - 2024. All rights reserved.