这两条线有什么区别?
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/