Neo4j PARALLEL运行时查询返回不同结果

i5desfxk  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(145)

我正在测试新的Neo4j PARALLEL运行时,无法通过我的测试,因为我的查询返回的结果与SLOTTED或PIPELINED不同(不同的元素顺序)。我是否需要以某种方式优化这些查询,以便它们在PARALLEL运行时正常工作?您是否有任何文档?或者,这些优化是不必要的,并且查询应该返回与SLOTTED或PIPELINED完全相同的结果?
此外,还有一个限制It is not possible to use the parallel runtime if a change has been made to the state of a transaction.https://neo4j.com/docs/cypher-manual/current/planning-and-tuning/runtimes/reference/
不幸的是,我有很多情况下,我目前使用apoc.cypher.mapParallel2在同一个事务中读取数据,我正在更新它。我想转换到PARALLEL运行时,但我无法这样做,由于这个限制。你打算在未来克服这个限制吗?

wwodge7n

wwodge7n1#

由于Neo4j的并行特性,这些情况是您所经历的原因。

  • 结果可能不是确定性的,因为不同的线程可能在不同的时间完成-使用ORDER BY子句
  • PARALLEL runtime不支持更新查询,例如使用CREATE, MERGE, SET, DELETE, or REMOVE的查询-并行更新图形可能会导致冲突或不一致,使用相同的读取,使用Cypher Shell中的:begin:commit命令来控制事务或其他运行时,例如SLOTTED or PIPELINED,用于写入查询。
  • 此外,它不支持阅读在同一事务中已修改的数据,因为这可能会导致concurrency问题或stale reads,即您无法使用apoc.cypher.mapParallel2过程读取在同一事务中已更新的数据-使用另一个过程,如apoc.cypher.doIt,或将事务分为两部分。

对于上面提到的情况限制,我怀疑他们是否有更新的计划。

相关问题