首页 > 解决方案 > 删除大量节点时 apoc.periodic.iterate 和 apoc.periodic.commit 之间的区别?

问题描述

这两条线有什么区别?

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})

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

标签: neo4j

解决方案


该过程apoc.periodic.iterate需要两个查询:

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

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

该过程apoc.periodic.commit只需要一个查询,并且该过程将再次执行查询,一次又一次......倾斜它的结果是0

因此,在您的示例中,您获取前 10000 个节点并删除它们。Node您重复此行为,直到您的数据库中没有更多内容为止。

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

如果您要删除大量节点,我建议您使用apoc.periodic.commit.


推荐阅读