0

我正在使用加载 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' 是我为两个预加载的节点类别创建的两个索引,希望加快查找操作。

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

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

4

2 回答 2

1

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

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

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

索引很重要,因为这就是 neo 找到节点的方式。

于 2016-07-16T01:10:44.097 回答
1

Index1.Filename在和上创建索引Index2.Field_name

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

验证这些索引是否在线:

:schema

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

更多信息在这里

于 2016-07-06T18:48:19.730 回答