我使用嵌入式 neo4j 作为 Web 服务。我的模型的一部分是这样的:
(user)-[HAS_ITEM]->(item)
现在我有几个不同的删除users
,但对于一些相同的items
。我知道如果我进行这些更新我会遇到死锁,因为当我尝试删除时 Neo4j 会锁定节点。我所看到的推荐策略是对这些更新进行排序,所以我这样做了,我列出了item
我需要删除的节点列表并对其进行排序,所以我总是以某种可预测的顺序删除。但是,当我删除关系时,我遇到了与关系锁定相关的另一个问题,即使它们是不同的关系。这是错误:
Details: 'Transaction(43141)[STATUS_ACTIVE,Resources=1] can't wait on resource RWLock[Relationship[620613598]] since => Transaction(43141)[STATUS_ACTIVE,Resources=1] <-[:HELD_BY]- RWLock[Node[620]] <-[:WAITING_FOR]- Transaction(43142)[STATUS_ACTIVE,Resources=0] <-[:HELD_BY]- RWLock[Relationship[620613598]]'.
Details: 'Transaction(43746)[STATUS_ACTIVE,Resources=0] can't wait on resource RWLock[Node[620]] since => Transaction(43746)[STATUS_ACTIVE,Resources=0] <-[:HELD_BY]- RWLock[Lockable relationship #620634878] <-[:WAITING_FOR]- Transaction(43747)[STATUS_ACTIVE,Resources=1] <-[:HELD_BY]- RWLock[Node[620]]'.
我怎样才能消除这个问题?我相信节点是这里唯一的争论点,但是似乎有一个锁定在事务正在争夺的关系上,即使每个事务不应该处理这些关系的删除(删除是互斥的到user
)。