neo4j - 删除大量节点时 apoc.periodic.iterate 和 apoc.periodic.commit 之间的区别?

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

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

最佳答案

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

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

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

    程序apoc.periodic.commit只需要一个查询,程序就会一遍又一遍地执行查询,一遍又一遍……倾斜它的结果是 0 .

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

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

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

    关于neo4j - 删除大量节点时 apoc.periodic.iterate 和 apoc.periodic.commit 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51171928/

    相关文章:

    node.js - 遍历 Node 之间的最优路径

    python - Py2Neo 没有正确创建日期时间数据类型?

    node.js - 如何在neo4j中运行批处理事务

    .net - 在 f# 中使用 Neo4jClient 创建带标签的节点

    docker - 使用Neo4j docker镜像切换事件数据库

    Neo4J 以正确的顺序遍历两种不同的关系?

    neo4j - 使用 neo4jphp 函数 "relateTo"在两个节点之间创建双向关系

    mysql - 在社交网络中使用图数据库有哪些优势?

    neo4j - 为什么我没有获得每个分离度的预期节点数?

    Neo4j vs OrientDB 对象映射选项 vs Tinkerpop Frames