Я использую встроенный neo4j в качестве веб-службы. Часть моей модели выглядит так:
(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
).
user
, поэтому я знаю, что это не является предметом спора. Я знаю, чтоitems
могут быть одинаковыми, однако я обращаюсь к ним по предсказуемой схеме, поэтому, даже если я блокирую его, это не должно быть тупиком на этом узле. - person Nicholas   schedule 02.08.2013