执行批量属性更新的推荐内存高效方法是什么?



我有一个Neo4j数据库,它有3000多万个节点。我想知道只使用Cypher Shell对节点属性中的返回模式进行批量更新的最有效方法(关于内存和速度(是什么。

例如:有一个标签为USER的节点,其属性名称为字符串类型,如:

'Peter_Test'

如果我想在批量更新中去掉所有下划线,那么实现这一点的最佳方法是什么,而不必在单个事务中选择3000万个节点中的每一个,更新内容并将其写回同一属性?

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

执行这样的任务有什么建议吗?

您可以使用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万个节点。。您可以使用批处理大小对其进行配置。

查看此处的文档

最新更新