使用10 GB RAM和100%CPU时,LOAD CSV挂起/不执行任何操作

时间:2014-10-14 19:08:02

标签: neo4j

我有以下查询来导入巨大的CSV数据集:

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///data_ssd/world/test.csv" AS line 
WITH line
WHERE line.lang IS NOT NULL
MATCH (i:Item {id: line.id})
MERGE (s:String {value: line.name, lang: line.lang})
CREATE (i)-[:name]->(s)

CSV包含约5300个项目。已经创建了所有:Item(大约约15米;因此MATCH);我只是错过了:String和关系。

neo4j消耗大约10 GB的内存,现在查询运行时间为1小时,但是仍然没有一个:String或关系插入到数据库中。 neo4j以100%CPU运行。这是一个不同于我运行的第一个查询的行为,我插入了所有:Item s(我看到节点计数器随着时间的推移快速增加)。

我的LOAD CSV命令有什么问题吗?

更新:在:Item(id):String(value):String(lang)上创建了索引。

1 个答案:

答案 0 :(得分:1)

我的第一个想法:你确定你有任何一行lang属性吗?

[EDITED]此外,尝试减少每个定期提交的批量大小。默认值为1000行。例如:USING PERIODIC COMMIT 500指定批量大小为500。

另外,我看到一个可能的逻辑错误,但它不应该是你的主要问题的原因(“没有”发生)。

逻辑错误是这样的:即使MERGE子句找到了现有的(s:String)节点,CREATE子句将始终继续创建(又是另一个)[:name] is之间的关系(即使已存在一个或多个)。

你可能意味着这样的事情,而不是:

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///data_ssd/world/test.csv" AS line 
WITH line
WHERE line.lang IS NOT NULL
MERGE (i:Item {id: line.id})-[:name]->(s:String {value: line.name, lang: line.lang})
相关问题