neo4j中的死锁问题,同时通过多个线程更新关系

时间:2017-03-31 14:46:18

标签: multithreading neo4j deadlock

我有两个名为Member和Content的节点,两者都以n:n的方式与关系HAS_RECOMMENDED(成员 - [:HAS_RECOMMENDED] - >内容)相关。一个成员可以有多个推荐内容,多个成员可以推荐一个内容。

当我使用多个线程从java创建图形和关系时,我收到以下错误:

  

org.springframework.dao.ConcurrencyFailureException:执行错误   Cypher“Neo.TransientError.Transaction.DeadlockDetected”;码:   Neo.TransientError.Transaction.DeadlockDetected;描述:   LockClient [1604184]无法在资源RWLock上等待[NODE(63575),   hash = 2083848996] since => LockClient [1604184]< - [:HELD_BY] -   RWLock [NODE(63663),hash = 1735956338]< - [:WAITING_FOR] -   LockClient [1604182]< - [:HELD_BY] - RWLock [NODE(63575),   散列= 2083848996];嵌套异常是   org.neo4j.ogm.exception.CypherException:执行Cypher时出错   “Neo.TransientError.Transaction.DeadlockDetected”;码:   Neo.TransientError.Transaction.DeadlockDetected;描述:   LockClient [1604184]无法在资源RWLock上等待[NODE(63575),   hash = 2083848996] since => LockClient [1604184]< - [:HELD_BY] -   RWLock [NODE(63663),hash = 1735956338]< - [:WAITING_FOR] -   LockClient [1604182]< - [:HELD_BY] - RWLock [NODE(63575),hash = 2083848996]

1 个答案:

答案 0 :(得分:3)

创建关系时,其端点节点将被写入锁定。如果多个线程尝试创建涉及同一组端点节点的关系,则可能会出现死锁,如您所遇到的那样。

如果你可以让每个线程在自己的一组端点节点上工作(不由任何其他线程共享),那么你应该能够避免这种死锁。