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 に答える