Neo4j получает/снимает блокировку записи - true/false vs remove

avatar
alexanoid
8 апреля 2018 в 07:54
437
2
0

В Neo4j для имитации уровня изоляции транзакций SERIALIZABLE мне нужно явно установить фиктивное свойство, например:

SET n._lock_ = true

Но как правильно снять блокировку, мне нужно SET n._lock_ = false или полностью удалить ее с помощью запроса REMOVE n._lock_?

Источник

Ответы (2)

avatar
cybersam
8 апреля 2018 в 08:30
3

Вы используете задокументированное поведение блокировки по умолчанию. Согласно документации, write lock "освобождается после завершения транзакции".

Поэтому, как только вы установите блокировку записи, она не будет снята до тех пор, пока ваш шифрованный запрос (и транзакция) не завершится.

Причина, по которой вы хотите включить предложение REMOVE n._lock_ перед завершением запроса, заключается в том, чтобы убедиться, что свойство _lock_, предназначенное для временного взлома, больше не существует после завершения запроса. (Но удаление этого свойства не приводит к снятию блокировки записи.)

alexanoid
8 апреля 2018 в 08:58
0

Спасибо, а снять блокировку до окончания транзакции нельзя?

cybersam
8 апреля 2018 в 09:40
1

Используя Java API neo4j, скажем, когда вы пишете процедуру плагина, вы можете явным образом разблокировать запись Lock, которую вы получили, когда вы приобрели проводную блокировку.

avatar
logisima
8 апреля 2018 в 08:28
0

Я не понимаю, что вы хотите сделать.

Neo4j является транзакционным, поэтому существует изоляция транзакций, а Neo4j управляет блокировками вместо вас.

Иногда полезно создать блокировку вручную, установив фиктивное свойство, например, чтобы избежать взаимоблокировки.

Блокировки снимаются при фиксации/откате транзакции.

alexanoid
8 апреля 2018 в 08:57
0

Насколько я знаю, Neo4j использует уровень изоляции с фиксированным чтением, с настраиваемой блокировкой, которую я хотел бы эмулировать сериализуемым уровнем изоляции. Вопрос в том, как правильно снять блокировку до окончания транзакции