为什么在Neo4j中导入一个10倍大的文件要比导入一个10倍大的原始字段花费更多的时间?



您好,我正在尝试通过csv文件导入数据到Neo4j。

假设我有10个csv文件,每个文件大约有3000行和2列。格式相同

当我导入一个文件时,它需要大约30秒,但是当我将10个csv文件合并成一个大的csv文件时,现在有30000行和2列,并尝试用相同的代码导入它,它需要这么多时间,并且永远之后它会给出一个"未知错误"。有人知道为什么会这样吗?

USING NEO4J 2.1.3

这应该执行得很好,并且对于最多有10M行的文件是线性扩展的:

CREATE INDEX ON :Label(id);
USING PERIODIC COMMIT 1000
LOAD CSV FROM "file:///home/me/import/data.csv" AS line
WITH distinct line[0] as id
MERGE (:Label {id:id});
USING PERIODIC COMMIT 1000
LOAD CSV FROM "file:///home/me/import/data.csv" AS line
WITH distinct line[1] as id
MERGE (:Label {id:id});
USING PERIODIC COMMIT 1000
LOAD CSV FROM "file:///home/me/import/data.csv" AS line
WITH line[0] as id1, line[1] as id2
MATCH (n1:Label {id:id1})
MATCH (n2:Label {id:id2})
CREATE (n1)-[:REL]->(n2)
;

原因如下:

  • 更复杂的合并/匹配+创建操作迫切地拉入所有文件内容,以将匹配与数据创建分开
  • 定期提交,太大的tx-size影响查找时间
  • 约束比索引写入更昂贵,单线程插入不需要
  • 约束

关于你的问题:

  • 如果您将最后一次查询中的定期提交更改为50或100k,您将看到差异。
  • 时间由neo4j-shell输出。
  • 你在11年进口了多少东西?
  • 超过10M:要么更有耐心,要么使用我的批量插入器。

最新更新