Neo4j acquire/release 写锁 - true/false vs 删除
Neo4j acquire/release the write lock - true/false vs remove
在 Neo4j 中,为了模拟 SERIALIZABLE
事务隔离级别,我需要显式设置一个虚拟 属性,例如:
SET n._lock_ = true
但是如何正确释放锁,我需要SET n._lock_ = false
还是通过REMOVE n._lock_
查询完全删除它?
我不明白你想做什么。
Neo4j 是事务性的,所以有事务隔离,Neo4j 为您管理锁。
有时,通过设置虚拟 属性 手动创建锁很有用,例如为了避免死锁。
当您 commit/rollback 交易时,锁被释放。
您正在使用已记录的 default locking behavior。根据文档,write lock
是 "released when the transaction finishes"。
因此,一旦您设置了写锁,在您的 Cypher 查询(和交易)完成之前,它不会被释放。
您希望在结束查询之前包含 REMOVE n._lock_
子句的原因是,您可以确保 _lock_
属性(旨在用作临时 hack)不是查询结束后更长的时间。 (但是删除那个属性不负责释放写锁。)
在 Neo4j 中,为了模拟 SERIALIZABLE
事务隔离级别,我需要显式设置一个虚拟 属性,例如:
SET n._lock_ = true
但是如何正确释放锁,我需要SET n._lock_ = false
还是通过REMOVE n._lock_
查询完全删除它?
我不明白你想做什么。
Neo4j 是事务性的,所以有事务隔离,Neo4j 为您管理锁。
有时,通过设置虚拟 属性 手动创建锁很有用,例如为了避免死锁。
当您 commit/rollback 交易时,锁被释放。
您正在使用已记录的 default locking behavior。根据文档,write lock
是 "released when the transaction finishes"。
因此,一旦您设置了写锁,在您的 Cypher 查询(和交易)完成之前,它不会被释放。
您希望在结束查询之前包含 REMOVE n._lock_
子句的原因是,您可以确保 _lock_
属性(旨在用作临时 hack)不是查询结束后更长的时间。 (但是删除那个属性不负责释放写锁。)