让我们考虑下图:
Steve---KNOWS--->Kent---KNOWS--->Ingrid
cool nice
|
+----KNOWS--->Burt
nice
......事实上,史蒂夫举办了一个派对,肯特的朋友们在他的公寓里大肆破坏。为此他原谅了肯特,但他想将英格丽德和伯特标记为混蛋。他几乎不知道他的妻子也想和 Kent 断绝关系,而当 Steve 开始他的交易时,她也开始了她的。下面是对数据集的操作顺序:
- Steve 开始交易 TX1
- Steve-KNOWS-Kent'cool'-KNOWS-* 上的 TX1 过滤器。TX1 找到英格丽德,锁定英格丽德并将她的人格属性更改为“混蛋”。
- 与此同时,史蒂夫怀恨在心的妻子在隔壁房间开始交易 TX2。
- TX2 过滤 Steve-KNOWS-relationships 和 name='Kent'。它锁定了肯特并将酷变不酷。此更新已提交。
TX1,仍然遍历图表是由 Ingrid 完成的,应该继续 Burt,还是应该?
- 即使 Steve-KNOWS-Kent'cool' 不再是 TRUE,TX1 是否会继续并将 Burt 设置为“jerk”?史蒂夫的妻子认为肯特不酷。
- 提交 TX1 是否会导致成功提交 Ingrid 的个性属性更新,或者此更改是否也会由于乐观锁定约束而失败,即结果集在更新时已更改。
请仅考虑默认锁定和 READ COMMITTED 隔离级别。
我不确定我是否理解了我的观点,而且我对 neo4j 还不够流利,无法自己进行测试。我认为解释默认锁定、乐观锁定方法和 READ COMMITTED 的后果会非常有用,最好有一个用例,其中一些在 neo4j 用户文档或参考手册中。