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