0

我使用嵌入式 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)。

4

1 回答 1

0

Neo4j锁定关系,以及附加在存储在磁盘上的链表中的 4 个其他关系。这就是为什么我得到我所做的信息。这里的解决方案是重试死锁删除,或者显式地在两个节点周围加锁。

于 2013-08-02T20:48:26.393 回答