Neo4J 的 APOC 插件 (3.1.3.6) 运行很慢

标签 neo4j neo4j-apoc

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

我有一些运行良好的代码,可以在大约一分半的时间内创建约 300 万个关系。但是现在,它已经运行了8个多小时,而且没有停止的迹象……

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

是吗rock_n_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)

最佳答案

我的理解是 call 是查询 ChessPlayers 和 Records 的笛卡尔积,然后尝试逐行过滤它们,然后对这些最终结果进行批量更新(这会占用大量内存,我认为这是一个打开事务是什么杀死了你)。因此,如果您可以将其分解,以便每个事务都可以接触尽可能少的节点,那么它的性能应该会大大提高(特别是如果 r.ChessPlayer 已编入索引,因为现在您不需要加载所有节点)

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)

period.commit() 的工作原理类似。您可以进行的每笔交易越小(接触的节点越少),批次就会变得越快。

关于Neo4J 的 APOC 插件 (3.1.3.6) 运行很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43563828/

相关文章:

neo4j 加载 .dump 文件后不启动

neo4j - 嵌套 apoc 迭代与 apoc load jdbc 返回 "cannot conclude with CALL"消息

neo4j - Cypher-如何设置最短路径上的节点属性

elasticsearch - APOC Elasticsearch查询格式

if-statement - Neo4j 条件查询

java - 对于嵌入式数据库,数据库是否加载到 neo4j 的主内存中?

apache - AWS EC2 实例 - Apache/Ubuntu 12.04 和 Neo4j 1.9.1

Neo4j 匹配路径排除具有特定标签的节点

postgresql - AgensGraph-Btree VS Neo4j-IndexFree

neo4j - 使用 apoc.gephi.add() 将图形属性名称传递给 gephi