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

Does Neo4j locking strategy block a user from accessing a node that is relocated at the same instant?

为了跟踪合同更改的历史记录,我在当前版本上增加了尾巴,每次更改时都会创建它。变更(续约)涉及删除旧关系(不删除任何节点)、插入新的当前版本节点以及创建新关系。我假设这一切都发生在一次交易中。如果客户端在更改发生时尝试访问当前版本,客户端是否会请求...

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

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

//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 数据库,因此您的问题将取决于 commit 何时实现:

  • 提交前 : 用户会发现之前的版本
  • 提交后 : 用户会发现新版本