删除许多节点时apoc.periodic.iterate和apoc.periodic.commit之间的区别?

时间:2018-07-04 10:52:04

标签: neo4j

这两行之间有什么区别?

call apoc.periodic.iterate("MATCH (n:Nodes) return n", "DETACH DELETE n", {batchSize:10000, iterateList:true})"

call apoc.periodic.commit("match (n:Nodes) limit {limit} detach delete n RETURN count(*)",{limit:10000})

删除大量节点的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

过程apoc.periodic.iterate接受两个查询:

  • 第一个在您的示例中创建一组节点的人
  • 第二个将针对第一个查询的每个结果执行

因此在您的示例中,您匹配了数据库的所有Node,然后以10000的批处理大小删除了它们。

过程apoc.periodic.commit仅接受一个查询,该过程将再次执行该查询,并一次又一次地将其结果倾斜为 0

因此,在您的示例中,您将前10000个节点删除。重复此行为,直到数据库中没有Node为止。

要继续,两个查询给出的结果相同,但方式不同。 apoc.periodic.iterate将比apoc.periodic.commit占用更多的RAM(该过程首先需要构建节点集),但是这样做的好处是您可以通过以下方式使用所有CPU:配置parallel:true(但要小心锁)。

如果要删除的节点数量非常多,我建议您使用apoc.periodic.commit