首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在apoc.periodic.iterate中调用APOC过程

在apoc.periodic.iterate中调用APOC过程
EN

Stack Overflow用户
提问于 2022-07-13 16:28:14
回答 1查看 254关注 0票数 0

我试图根据apoc.create.relationship函数的现有关系属性添加新的关系:

代码语言:javascript
运行
复制
:auto CALL apoc.periodic.iterate(
    "MATCH (source:Entity)-[r:TEMP_RELATION]->(target:Entity) RETURN source, r, target",
    "CALL apoc.create.relationship(source, r.`Interaction-type`, r, target) YIELD rel RETURN rel",
    {batchSize:5}
    );

当我运行这个查询时,我会得到Java堆错误(最大堆是8g)。看起来iterate实际上并不是在迭代,而是将过多的内容加载到内存中。我在Mac (M1)上使用Neo4j 4.4.8。

知道这里为什么会有内存泄漏吗?

EN

Stack Overflow用户

回答已采纳

发布于 2022-07-13 17:15:22

由于neo4j 4的行为发生了变化,当您将一个节点或关系传递给一个单独的事务/语句时,它会将它自己的事务传递到它起源的地方。

因此,所有更新都是在原始事务上积累的。为了避免这种情况,您必须通过返回id(n) as idid(r) as relId来“重新绑定”节点和rels。

然后,您可以在update语句:WHERE id(n) = id中重新匹配节点和re,并在那里使用它。在你的例子中:

代码语言:javascript
运行
复制
:auto CALL apoc.periodic.iterate(
"MATCH (source:Entity)-[r:TEMP_RELATION]->(target:Entity) RETURN id(source) as sId, properties(r) as props, r.`Interaction-type` as type, id(target) as tId",
"MATCH (source), (target) where id(source) = sId AND id(target) = tId 
 CALL apoc.create.relationship(source, type, props, target) YIELD rel RETURN count(*)",
{batchSize:10000}
);
票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72969640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档