您好,我正在尝试通过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:要么更有耐心,要么使用我的批量插入器。