这两行有什么区别?
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
。