2

我在 Neo4j 中运行这段代码:

//Creates an edge labeled "Mentioned". 
LOAD CSV FROM "file:///datafile.csv" AS row 
MERGE (u:ChatItem {id: toInteger(row[0])}) 
MERGE (t:User {id: toInteger(row[1])})
MERGE (u)-[:Mentioned{timeStamp: toInteger(row[2])}]->(c) 
//userid, userid, timestamp

我收到了这个警告: 这个查询的执行计划包含 Eager 运算符,它强制所有相关数据在继续之前在主内存中实现

在执行计划包含 Eager 运算符的查询中对大型数据集使用 LOAD CSV 可能会消耗大量内存并且可能无法正常执行。有关如何避免问题的更多信息和提示,请参阅 Eager 运算符上的 Neo4j 手册条目。

以下是数据集的概述:

6824,1847,1464235815.0
6865,789,1464239415.0
6906,518,1464243003.0
6934,240,1464243031.0
6968,1482,1464244803.0
6976,1792,1464244811.0
6983,767,1464244818.0

这是什么意思,我能做些什么呢?

4

1 回答 1

3

这是因为您正在创建(或不创建)节点,然后在它们之间创建(或不创建)关系。

在单个 Cypher 语句中,Neo4j 必须进一步隔离影响匹配的更改,例如,当您创建带有标签的节点时,该标签突然被稍后的 MATCH 或 MERGE 操作匹配。

这就是你进行eager手术的原因。

为避免这种情况,您可以:

  • MERGE将关系更改为CREATE(如果可能)
  • 有 2 个脚本:一个创建节点,一个只创建关系(MATCH、MATCH、MERGE 查询类型)
于 2018-04-20T10:47:04.400 回答