Neo4j合并链意外放缓

时间:2015-09-15 09:12:04

标签: neo4j cypher

我正在运行neo4j 2.2.4

我有一个大的合并链,匹配/创建一堆节点和关系,以及设置属性。

我的所有节点合并都基于一个索引。

对于几乎为空的数据库(因此所有合并将最终创建节点/关系),我得到以下时间:

+-------------------+
| No data returned. |
+-------------------+
Nodes created: 40
Relationships created: 87
Properties set: 62
Labels added: 40
1557 ms
Total database accesses: 688

现在40个节点和87个关系并不多,我希望查询的执行速度比1.5秒快得多。

以下是具有相似风格的较大查询的时间安排。

+-------------------+
| No data returned. |
+-------------------+
Nodes created: 214
Relationships created: 454
Properties set: 469
Labels added: 214
298711 ms

我对这有多慢感到有些惊讶。在这里有什么我可能做错了吗?

编辑:

查询的开头看起来像这样,其余的风格非常相似:

merge (e1:Label { id: "e1" })
merge (e2:Label { id: "e2" })
merge (e1)-[:R1]->(e2)
merge (e3:Label { id: "e3" })
merge (e2)-[r1:R2]->(e3)
  on create set r1.p = "v" 
  on match set r1.p = "v"
merge (e4:Label { id: "e4" })
merge (e4)-[:R1]->(e3)
merge (e1)-[:R2]->(e4)
merge (e5:Label { id: "e5" })
merge (e2)-[r2:R3]->(e5)
  on create set r2.p = "v"
  on match set r2.p = "v"                                                                                          
merge (e6:Label { id: "e6" })
merge (e6)-[:R1]->(e5)
merge (e1)-[:R3]->(e6)

索引

  ON :Label(id) ONLINE (for uniqueness constraint) 

约束

  ON (e:Label) ASSERT e.id IS UNIQUE

编辑2:

此处捕获~40个节点查询的配置文件: https://gist.github.com/haoyangnz/c59b99a9a99a87edf00a

由于StackOverflowError

,~200节点查询的配置文件失败

2 个答案:

答案 0 :(得分:2)

您可以尝试合并所有节点以及合并关系之后。喜欢 Merge (a:A{id:1}), (b:B{id:2}) with a, b Merge (a)-[:RELATES_TO]->(b)。 通过分离合并,可能更容易找到问题。您可能需要id的索引,就像我的情况一样。但我不确定它是否有帮助。

答案 1 :(得分:0)

我在console.neo4j.org上尝试了你的示例查询,它在几毫秒内完成:

  

查询耗时187毫秒,没有返回任何行。更新了图表 - 创建了6   节点和7个关系设置8个属性结果详细信息

你在运行什么操作系统?您是否更改了任何默认设置?