Neo4j 加载CSV挂起/不执行任何操作,同时消耗10 GB的RAM和100%的CPU

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

我有以下查询来导入一个巨大的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万个项目。所有
:项目
已创建(约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码,但都没用。