此查询的执行计划包含 Eager 运算符,它强制所有相关数据在继续之前在主内存中具体化
The execution plan for this query contains the Eager operator, which forces all dependent data to be materialized in main memory before proceeding
我是 运行 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 运算符,它强制
在继续之前,所有相关数据都将在主内存中具体化
在执行计划所在的查询中对大型数据集使用 LOAD CSV
包含 Eager 运算符可能会消耗大量内存并且是
可能表现不佳。请参阅 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
这是什么意思,我该怎么办?
这是因为您正在创建(或不创建)节点,然后在它们之间创建(或不创建)关系。
在单个 Cypher 语句中,Neo4j 必须隔离影响进一步匹配的更改,例如当您创建带有标签的节点时,这些节点突然被后来的 MATCH 或 MERGE 操作匹配。
这就是你进行 eager
手术的原因。
要避免它,您可以:
- 将关系上的
MERGE
更改为 CREATE
(如果可能的话)
- 有 2 个脚本:一个创建节点,一个只创建关系(MATCH、MATCH、MERGE 查询类型)
我是 运行 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 运算符,它强制 在继续之前,所有相关数据都将在主内存中具体化
在执行计划所在的查询中对大型数据集使用 LOAD CSV 包含 Eager 运算符可能会消耗大量内存并且是 可能表现不佳。请参阅 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
这是什么意思,我该怎么办?
这是因为您正在创建(或不创建)节点,然后在它们之间创建(或不创建)关系。
在单个 Cypher 语句中,Neo4j 必须隔离影响进一步匹配的更改,例如当您创建带有标签的节点时,这些节点突然被后来的 MATCH 或 MERGE 操作匹配。
这就是你进行 eager
手术的原因。
要避免它,您可以:
- 将关系上的
MERGE
更改为CREATE
(如果可能的话) - 有 2 个脚本:一个创建节点,一个只创建关系(MATCH、MATCH、MERGE 查询类型)