我最近发现执行并发MERGE
语句时存在竞争条件。具体而言,可以在MATCH
步骤之后但在给定CREATE
的{{1}}步骤之前创建节点的方案中创建重复节点。
这可以在某些情况下使用合并节点上的唯一约束来解决;然而,在以下情况下,这种情况不足:
使用MERGE
解决这个问题(还是存在相同的陷阱)?如果是这样,它是唯一的选择吗?当CREATE UNIQUE
有效地无法保证合并的路径或节点的唯一性时,感觉MERGE
的有用性会大大减少......
答案 0 :(得分:0)
当MERGE
语句同时执行时,可能会发生这些情况。基本上,每个事务在第一个读取点获取图形视图,并且在该点之后不会看到更新(有一些变化)。对此的主要例外是受限制的节点,Neo4j在读取时会从索引初始化一个新的阅读器,而不管之前在事务中读取的是什么。
解决方法可能是在其上创建一个“虚拟”属性和一个唯一约束以及一个节点标签。在Neo4j 2.2.5中,这应该可以解决您的问题。