csv - 该查询的执行计划包含 Eager 运算符,该运算符强制所有相关数据在继续之前在主内存中具体化

标签 csv neo4j load cypher eager

我正在 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/

相关文章:

java - GetMapping 使用 Spring Boot 生成 CSV 文件

powershell - 如何最初使用 PowerShell 向 CSV 文件添加 header

sql - Oracle SQL : Export to CSV avoiding newlines

neo4j - 升级到 3.0.0 后,Neo 无法启动远程访问

javascript - 如何加载测试 JavaScript/AngularJS 应用程序?

php - JQuery 加载的 PHP 文件中的 UTF-8

python - 如何从 CSV 的任意 BZ2 流中读取行?

python - 如何返回具有值的节点的所有属性

database - 自上周以来无法在 NEO4J 上运行 'USING PERIODIC COMMIT'

php - 为什么 auto_prepend_file 在 php 的交互模式下不起作用?