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

Csv 为什么在Neo4j中,导入一个10倍大的文件所花费的时间要比原始文件的10倍多?,csv,neo4j,Csv,Neo4j,您好,我正在尝试通过csv文件将数据导入Neo4j 假设我有10个csv文件,每个文件大约有3000行和2列。都是同样的格式 当我导入一个文件时,大约需要30秒,但是当我将10个csv文件合并成一个大的csv文件时,它现在有30000行和2列,并尝试使用相同的代码导入它,这需要花费太多的时间,而且永远都会出现“未知错误”。有人知道为什么会发生这种情况吗?使用NEO4J 2.1.3 这应该可以很好地执行,并且可以线性缩放多达10M行的文件: CREATE INDEX ON :Label(id);

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

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

当我导入一个文件时,大约需要30秒,但是当我将10个csv文件合并成一个大的csv文件时,它现在有30000行和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)
;
原因是:

  • 更复杂的merge/match+create操作急切地拉入所有文件内容,以将匹配与数据创建分开
  • 发送大小过大的定期提交会影响查找时间
  • 约束比索引更昂贵,而且单线程插入不需要约束
关于你的问题:

  • 如果将上一次查询中的定期提交更改为50或100k,则会看到差异
  • 时间由neo4j外壳输出
  • 你在11秒内进口了多少东西
  • 10米以上:要么更有耐心,要么像我一样使用

你能分享你用来加载文件的代码吗?非常感谢你再次回答我的问题!!!如果你不介意的话,我现在还有两个关于Neo4j和Cypher的问题。我没有看到与使用周期提交1000×2相关的结果。如果我想跟踪添加节点或关系所用的时间,该怎么办?在“11432ms中返回0行”中是11432ms吗。如果超过1000万呢?更新答案,回答你的3个问题。