組み込みの 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
)。