Neo4j PHP получить блокировку wirte

Тонет в большой беде,

Ну, может кто-нибудь сказать мне, как я могу получить блокировку записи через шифр. Примечание: я буду использовать REST API, поэтому мой шифр будет в php.

РЕДАКТИРОВАНИЕ: Сценарий:

Я использую Neo4j REST сервер и PHP для доступа к нему.

Теперь я создал узел с именем "counter-node", который генерирует новый идентификатор пользователя. Логика просто добавить 1 к предыдущему значению.

Теперь, если два пользователя приходят одновременно, тогда первый пользователь читает значение "счетчик-узел" НО, прежде чем он сможет обновить его до 1, второй пользователь читает его. Таким образом, значение в 'counter-node' не соответствует ожидаемому.

Любая помощь

2 ответа

Вам не нужно явно получать блокировки записи. Все узлы, которые вы изменяете в транзакции, автоматически блокируются от записи.

Так что, если вы делаете это в своей логике:

start tx
increment counter node
read the value of the counter node and set it on the user node as ID
commit tx

никакие два пользователя никогда не получат одинаковый идентификатор.

Популярный плагин APOC для Neo4j имеет выбор явных процедур блокировки, которые можно вызывать через Cypher, например: call apoc.lock.nodes([nodes])

Узнайте больше на http://neo4j-contrib.github.io/neo4j-apoc-procedures/

Примечание: насколько я могу судить, эта функция изначально не существует в Cypher, поэтому, вероятно, APOC - ваш лучший выбор.

Другие вопросы по тегам