使用neo4j更改关系时两个节点的acquireWriteLock的顺序

时间:2017-03-06 16:54:07

标签: neo4j

据说当改变关系时,其相关节点将被写入。我想先知道哪个节点会被锁定。出现这种要求是因为我需要手动锁定两个节点,我担心如果以不同的顺序锁定它们会导致死锁。我应该担心吗?

2 个答案:

答案 0 :(得分:3)

Neo4j锁定具有最低id的节点,如果它不是自我关系,则锁定具有最高id的节点。这是至少2.2(.latest)。

答案 1 :(得分:2)

要明确:

  • 关系的开始和结束节点仅在关系创建删除期间自动写锁定。

    • 首先锁定具有较低本机ID的结束节点。
      • 在修复Issue 6914之前,关系删除实际上以不同的方式锁定了终端节点 - 始终首先锁定起始节点。最新版本的2.2,2.3和3.x不再存在这种不一致。
    • 在关系删除期间,关系本身也会被写锁定 - 在其终端节点被锁定后。
  • 如果您只是添加/删除/删除关系的属性,则只会对该关系进行写锁定。终端节点已锁定。