在neo4j中使用load csv添加关系需要花费大量时间

时间:2016-07-06 18:39:23

标签: neo4j cypher load-csv

我正在使用load csv操作在Neo4j中将关系加载到我的图形数据库中。节点已经创建。我有四种不同类型的关系可以从四种不同的CSV文件创建(文件1 - 59关系,文件2 - 905关系,文件3 - 173,000关系,文件4 - 超过100万关系)。密码查询执行得很好,但是文件1(59个关系)执行需要25秒,文件2需要6.98分钟,文件3仍然在过去2个小时内继续运行。鉴于neo4j处理数百万个关系的能力,我不确定这些执行时间是否正常。我正在使用的示例密码查询如下所示。

load csv with headers from
"file:/sample.csv"
as rels3
match (a:Index1 {Filename: rels3.Filename})
match (b:Index2 {Field_name: rels3.Field_name})
create (a)-[:relation1 {type: rels3.`relation1`}]->(b)
return a, b

'a'和'b'是我为两个预加载的节点类别创建的两个索引,希望加快查找操作。

附加信息 - 节点数(类别) - 1791                          节点数(b类别) - 3341

是否有更快的方法来加载它并加载csv操作需要花费这么多时间?我在某个地方出错了吗?

2 个答案:

答案 0 :(得分:1)

Index1.FilenameIndex2.Field_name上创建索引:

CREATE INDEX ON :Index1(Filename);
CREATE INDEX ON :Index2(Field_name);

验证这些索引是否在线:

:schema

通过将PROFILE添加到查询的开头并查看执行计划以查看是否正在使用索引来验证查询是否正在使用索引。

更多信息here

答案 1 :(得分:1)

在运行查询之前我想要做的是首先运行explain以查看是否有任何警告。由于警告,我已修复了许多查询 (简单的预先附加explain到您的查询)

此外,也许您可​​以删除return语句。查询完成后,您可以运行另一个查看节点。

我使用与您非常相似的查询在大约54分钟内创建大约20M的关系。

指数很重要,因为neo是如何找到节点的。