建议执行大规模属性更新的内存有效方式是什么?

时间:2020-02-22 17:25:47

标签: neo4j

我的Neo4j DB拥有超过3000万个节点。我想知道什么是仅使用Cypher Shell对节点属性内的返回模式进行批量更新的最有效的方法(关于内存和速度)。

例如:拥有一个节点,其标签为USER,其属性名称类型为String,例如:

'Peter_Test'

如果要在批量更新中删除所有下划线,什么是最好的方法,而不必在单个事务中选择3000万个节点中的每一个,就更新内容并将其写回到同一属性?

先选择所有USER节点,然后为选择的每个条目添加一个UNWIND,然后再进行更新,肯定会遇到内存问题。

是否有执行此类任务的建议?

1 个答案:

答案 0 :(得分:1)

您可以为此使用apoc过程apoc.periodic.iterate,

CALL apoc.periodic.iterate( "MATCH (o:Order) WHERE o.date > '2016-10-13' RETURN o", "MATCH (o)-[:HAS_ITEM]->(i) WITH o, sum(i.value) as value SET o.value = value", {batchSize:100})

这是文档中的示例。在第一个查询中返回要更新的节点并在第二个查询中执行更新的位置。在这里,您不会一次加载所有3000万个节点。您可以使用批处理大小对其进行配置。

查看文档here

相关问题