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)不是查询结束后更长的时间。 (但是删除那个属性不负责释放写锁。)