首页 文章

删除关系时避免死锁

提问于
浏览
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 ) .

1 回答

  • 0

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

相关问题