在Neo4j中为了模拟SERIALIZABLE
事务隔离级别,我需要显式设置一个虚拟属性,例如:
SET n._lock_ = true
但是如何正确释放锁定,是否需要SET n._lock_ = false
或通过REMOVE n._lock_
查询完全删除它?
答案 0 :(得分:2)
您正在使用记录的default locking behavior。根据文档,当事务完成时,write lock
将被释放"。
因此,一旦设置了写锁定,在Cypher查询(和事务)完成之前不会释放它。
您希望在结束查询之前包含REMOVE n._lock_
子句的原因是为了确保在查询结束后_lock_
属性(用作临时黑客)不再存在。 (但删除该属性不对释放写锁定负责。)
答案 1 :(得分:0)
我不明白你想做什么。
Neo4j是事务性的,因此存在事务隔离,Neo4j为您管理锁。
有时,通过设置虚拟属性来手动创建锁是很有用的,例如为了避免死锁。
提交/回滚事务时会释放锁。