【问题标题】:Neo4J's APOC plugin (3.1.3.6) is running very slowNeo4J 的 APOC 插件 (3.1.3.6) 运行很慢
【发布时间】:2017-09-19 16:52:11
【问题描述】:

我最近将我的 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)

【问题讨论】:

  • 您之前使用的是什么版本的 neo4j 和 apoc?
  • 嗨,cybersam!我知道我在运行neo4j-community-3.0.1,但我不确定我拥有的是什么版本的 apoc:/

标签: neo4j neo4j-apoc


【解决方案1】:

我的理解是调用是查询 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)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多