Neo4J';s APOC插件(3.1.3.6)运行速度非常慢

Neo4J';s APOC插件(3.1.3.6)运行速度非常慢,neo4j,neo4j-apoc,Neo4j,Neo4j Apoc,我最近将我的Neo4j升级到了3.1.3,同时还获得了最新的APOC插件(3.1.3.6) 我有一点代码工作得很好,可以在大约一分半钟的时间内创建约300万个关系。但现在,它已经运行了8个多小时,没有停止的迹象 因为代码过去运行时没有任何问题,所以我希望版本之间一定发生了一些变化,导致我的代码被破坏 应该更改的是rock\n\u roll(可能是apoc.periodic.commit,带有位置参数或其他什么)?谢谢你的洞察力 这是我正在运行的 CALL apoc.periodic.rock_n

我最近将我的Neo4j升级到了3.1.3,同时还获得了最新的APOC插件(3.1.3.6)

我有一点代码工作得很好,可以在大约一分半钟的时间内创建约300万个关系。但现在,它已经运行了8个多小时,没有停止的迹象

因为代码过去运行时没有任何问题,所以我希望版本之间一定发生了一些变化,导致我的代码被破坏

应该更改的是
rock\n\u roll
(可能是
apoc.periodic.commit
,带有位置参数或其他什么)?谢谢你的洞察力

这是我正在运行的

CALL apoc.periodic.rock_n_roll(
  "MATCH (c:ChessPlayer),(r:Record) WHERE c.ChessPlayer_ID = r.ChessPlayer RETURN c,r",
  "CYPHER planner=rule WITH {c} AS c, {r} AS r CREATE (c)-[:HAD_RECORD]->(r)",
  200000)

我的理解是,调用是查询棋子和记录的笛卡尔积,然后尝试逐行过滤它们,然后对这些最终结果进行批处理更新(这消耗了大量内存,我认为这一个打开的事务会让你感到痛苦)。因此,如果您可以将其分解,使每个事务可以接触尽可能少的节点,那么它应该能够执行得更好(特别是如果r.ChessPlayer被索引,因为现在您不需要加载所有节点)


periodic.commit()的工作原理与此类似。您可以进行的每笔交易越小(接触的节点越少),批处理的速度就越快。

您以前使用的neo4j和apoc的版本是什么?嗨,cybersam!我知道我运行的是
neo4j-community-3.0.1
,但我不确定我使用的是什么版本的apoc:/
CALL apoc.periodic.rock_n_roll(
  "MATCH (c:ChessPlayer) WHERE NOT EXISTS((c)-[:HAD_RECORD]->()) RETURN c",
  "MATCH (r:Record) WHERE c.ChessPlayer_ID = r.ChessPlayer WITH c,r CREATE UNIQUE (c)-[:HAD_RECORD]->(r)",
  100000)