Neo4j获取/释放写锁定 - 真/假vs删除

时间:2018-04-08 07:54:36

标签: neo4j cypher transaction-isolation

在Neo4j中为了模拟SERIALIZABLE事务隔离级别,我需要显式设置一个虚拟属性,例如:

SET n._lock_ = true

但是如何正确释放锁定,是否需要SET n._lock_ = false或通过REMOVE n._lock_查询完全删除它?

2 个答案:

答案 0 :(得分:2)

您正在使用记录的default locking behavior。根据文档,当事务完成时,write lock将被释放"。

因此,一旦设置了写锁定,在Cypher查询(和事务)完成之前不会释放它。

您希望在结束查询之前包含REMOVE n._lock_子句的原因是为了确保在查询结束后_lock_属性(用作临时黑客)不再存在。 (但删除该属性不对释放写锁定负责。)

答案 1 :(得分:0)

我不明白你想做什么。

Neo4j是事务性的,因此存在事务隔离,Neo4j为您管理锁。

有时,通过设置虚拟属性来手动创建锁是很有用的,例如为了避免死锁。

提交/回滚事务时会释放锁。