【问题标题】:'Java heap space' error with neo4j -- when increasing memory allocation failsNeo4j 的“Java 堆空间”错误——当增加内存分配失败时
【发布时间】:2016-05-16 06:14:45
【问题描述】:

我使用导入工具读取了大约 100 万个节点。现在是建立关系的时候了。 (不幸的是,如果你想使用导入工具,看起来你必须在 csv 中明确地预先确定关系,所以这是不可能的。)

我做的第一件事是在节点上放置一个索引。

接下来,我写了这个,我想知道这是我的问题——即使有一个索引,这个语句可能会导致太多的笛卡尔积?:

USING PERIODIC COMMIT 500
LOAD CSV WITH HEADERS FROM
'file:///home/monica/...relationship.csv' AS line
MATCH (p1:Player {player_id: line.player1_id}),  (p2:Player {player_id: line.player2_id})
MERGE (p1)-[:VERSUS]-(p2)  

显然USING PERIODIC COMMIT 500 没有帮助,因为我得到了我的错误,

Java heap space  

四处搜索,我了解到更改 neo4j-wrapper.conf 文件中的内存设置可能会有所帮助,因此我将设置一直更改为 4GB(我有一个 8 GB 系统):

wrapper.java.initmemory=4096
wrapper.java.maxmemory=4096  

仍然遇到同样的错误。

现在,我被困住了。除了:

之外,我想不出任何其他策略:

1) 重写语句
2) 使用内存更大的系统?
3)找到其他方法来批量运行它?

任何建议都会很棒。提前感谢 neo4j SO 社区。

【问题讨论】:

    标签: neo4j heap-memory


    【解决方案1】:

    :Player(player_id) 上是否有索引或唯一约束?如果是前者,则删除索引并添加唯一约束。否则,可能有多个 Player 节点共享相同的 player_id - 这可能会导致笛卡尔积,假设您有 10 倍相同的播放器,这将导致 csv 的每一行有 100 个组合。

    一旦您确定没有此类重复,接下来要检查的是EagerPipe。如果查询计划(不带PERIODIC COMMIT

    EXPLAIN LOAD CSV WITH HEADERS FROM
    'file:///home/monica/...relationship.csv' AS line
    MATCH (b1:Player {player_id: line.player1_id}),  (p2:Player {player_id:     line.player2_id})
    MERGE (p1)-[:VERSUS]-(p2)  
    

    显示带有eager 的内容,然后PERIODIC COMMIT 未应用,有关详细信息,请参阅http://www.markhneedham.com/blog/2014/10/23/neo4j-cypher-avoiding-the-eager/

    随着 Neo4j 的更新版本越来越少,发生这种情况的情况越来越少。

    更新

    我刚刚意识到您在匹配中使用b1,在合并中使用p1 - 所以后者不存在并在合并期间被创建为新节点。

    你能不能试试:

    USING PERIODIC COMMIT 500
    LOAD CSV WITH HEADERS FROM
    'file:///home/monica/...relationship.csv' AS line
    MATCH (p1:Player {player_id: line.player1_id})
    MATCH (p2:Player {player_id: line.player2_id})
    MERGE (p1)-[:VERSUS]-(p2)
    

    【讨论】:

    • 我照你说的做了;我删除了索引,添加了唯一约束,然后检查了查询计划。确实……潜伏着一个eager!现在我需要阅读文档并了解如何解决这个问题。感谢您为我指明这个方向。
    • Mark Needham 博客的链接建议避免在LOAD CSV 的任何一次迭代中做太多事情。就我而言,我在LOAD CSV 的一次迭代中只做一件事...
    • 您使用的是哪个 neo4j 版本?
    • 我使用的是 2.3.2 版本
    • 啊,很抱歉,我的帖子有错字!不应该有'b'......只有'p'。我重新打字有点太仓促了。我很抱歉!我现在将编辑原始帖子。 :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 2021-09-09
    • 2022-11-25
    • 2018-11-10
    • 2014-01-04
    • 1970-01-01
    相关资源
    最近更新 更多