创建唯一路径时是否存在竞争条件?

时间:2015-08-28 11:30:32

标签: neo4j

我最近发现执行并发MERGE语句时存在竞争条件。具体而言,可以在MATCH步骤之后但在给定CREATE的{​​{1}}步骤之前创建节点的方案中创建重复节点。

这可以在某些情况下使用合并节点上的唯一约束来解决;然而,在以下情况下,这种情况不足:

  1. 没有一个独特的属性可以强制执行(例如,成对的属性需要是唯一的,但个别属性不是)。
  2. 尝试合并关系和路径。
  3. 使用MERGE解决这个问题(还是存在相同的陷阱)?如果是这样,它是唯一的选择吗?当CREATE UNIQUE有效地无法保证合并的路径或节点的唯一性时,感觉MERGE的有用性会大大减少......

1 个答案:

答案 0 :(得分:0)

MERGE语句同时执行时,可能会发生这些情况。基本上,每个事务在第一个读取点获取图形视图,并且在该点之后不会看到更新(有一些变化)。对此的主要例外是受限制的节点,Neo4j在读取时会从索引初始化一个新的阅读器,而不管之前在事务中读取的是什么。

解决方法可能是在其上创建一个“虚拟”属性和一个唯一约束以及一个节点标签。在Neo4j 2.2.5中,这应该可以解决您的问题。