为什么导入一个10倍大的文件需要的时间比Neo4j中原始场的10倍多?

时间:2014-08-06 22:21:48

标签: csv neo4j

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

我们说我有10个csv文件,每个文件大约有3000行和2列。所有相同的格式。

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

1 个答案:

答案 0 :(得分:2)

使用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输出。
  • 你在11s进口了多少东西?
  • 超过10M:要么更耐心,要么使用像batch-inserter这样的东西。