我正在 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 运算符可能会消耗大量内存,并且是 可能表现不佳。请参阅 Neo4j 手册中关于 Eager 操作符的条目 了解有关如何避免问题的更多信息和提示。
以下是数据集的概述:
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 操作匹配。
这就是您渴望
操作的原因。
为了避免这种情况,您可以:
- 将关系上的
MERGE
更改为CREATE
(如果可能) - 有 2 个脚本:一个用于创建节点,另一个仅用于创建关系(MATCH、MATCH、MERGE 查询类型)
关于csv - 该查询的执行计划包含 Eager 运算符,该运算符强制所有相关数据在继续之前在主内存中具体化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49936206/