【发布时间】:2014-09-16 10:04:54
【问题描述】:
我正在使用 LOAD CSV 命令合并大约 500,000 个关系的大批量:
LOAD CSV WITH HEADERS FROM 'http://file.csv'
MATCH (a:Label {uid: csv.uid1}),(b:Otherlabel {uid: csv.uid2})
MERGE (a)-[:TYPE {key1: csv.key1}]->(b)
uid 两个属性都有一个UNIQUE 约束。
CSV 文件如下所示:
uid1,uid2,key1
123,abc,some_value
456,def,some_value
当每边有许多不同的节点时,这通常非常快(
但是当我加载单个a 节点连接到许多不同b 节点的批处理时,性能会急剧下降。 uid1 始终相同,但架构约束仍然存在。约 30,000 条关系需要约 8 分钟才能加载。
我在这里遗漏了什么吗?什么可以解释MERGEing“多对多”关系与“一对多”关系的巨大性能差异?
【问题讨论】:
-
您的索引是什么样的?
-
我刚刚使用一个 ~300,000 行的 CSV 文件验证了这种行为,该文件使用 uid1 和 uid2 的唯一随机值创建。我想知道当单个“a”节点与其他节点之间创建了许多关系时,是否必须调整“a”节点的关系列表的大小?当没有单个节点获得大量关系时,每个关系列表都保持较小。
-
两个标签的“uid”都有独特的限制。 @JimBiard我假设会发生这样的事情,也许在添加许多关系时会出现文件系统。
CREATE语句仍然很快,你也尝试过吗? -
这几乎证明了正在发生的事情。请参阅我发布的答案。