Neo4j 加载CSV挂起/不执行任何操作,同时消耗10 GB的RAM和100%的CPU
我有以下查询来导入一个巨大的CSV数据集:Neo4j 加载CSV挂起/不执行任何操作,同时消耗10 GB的RAM和100%的CPU,neo4j,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)-[:nam
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万个项目。所有:项目
已创建(约15米;因此匹配
);我只缺少:字符串和关系
neo4j消耗了大约10GB的内存,现在查询运行了大约1个小时,但数据库中甚至没有插入一个:字符串或关系。neo4j以100%的CPU运行。这与我运行的第一个查询不同,我在其中插入了所有:Item
s(我看到节点计数器随时间快速增加)
我的加载CSV
命令有什么问题吗
更新:在:Item(id)
、:String(value)
和:String(lang)
上创建索引。我的第一个想法是:您确定有带lang
属性的行吗
[已编辑]此外,请尝试减少每次定期提交的批大小。默认值为1000行。例如:使用定期提交500
指定批量大小为500
此外,我看到一个可能的逻辑错误,但它不应该是您的主要问题(“什么都没有发生”)的原因
逻辑错误是这样的:即使MERGE
子句找到了一个现有的(s:String)
节点,CREATE
子句将始终继续创建i
和s
之间的(另一个)[:name]
关系(即使已经存在一个或多个)
你的意思可能是这样的:
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})
是的,这里有很多酒店。只是尝试了一个限制
(比如限制1000
)的查询,它就像一个符咒一样工作。很明显,它只存在没有定义限制的问题。是的,CREATE
是故意的,因为图形中没有这样的关系。我不需要检查它是否已经在那里,以便我理解。谢谢你的建议。谢谢,我试过了,但是没有效果。我甚至试过100码或1码,但都没用。