【问题标题】:Adding 5834580 of node to Spatial Layer将节点的 5834580 添加到空间层
【发布时间】:2018-06-22 13:06:42
【问题描述】:

我正在尝试创建由 5834580 个节点组成的 R-TREE
我在this question 发现了一个类似的问题,我尝试了它的解决方案,所以这是我的代码:

call apoc.periodic.commit("MATCH (pl:pickup_location) WITH collect(pl) AS pickup CALL spatial.addNodes('nyc',pickup) YIELD count RETURN count",{limit:1000})

但是,从昨天开始,计算机没有完成加载结果。

今天,我用 iterate 尝试了第二个答案:

CALL apoc.periodic.iterate(
"MATCH (pl:pickup_location) RETURN pl",
"CALL spatial.addNode('nyc', pl) YIELD node RETURN node",
{batchSize:10000, parallel:false, listIterate:true})

我得到这个错误:

Neo.ClientError.Procedure.ProcedureCallFailed: Failed to invoke procedure `apoc.periodic.iterate`: Caused by: java.lang.OutOfMemoryError: Java heap space

怎么了?我该怎么办?

【问题讨论】:

    标签: neo4j cypher neo4j-apoc neo4j-spatial


    【解决方案1】:

    您对apoc.periodic.commit 的问题是您的查询将始终返回与您的MATCH (pl:pickup_location) 相同的节点。没有条件只查找不在空间布局中的节点。

    我不记得空间插件的模型,但据我记得,在您的 pickup_location 节点上,您应该与 R-Tree 有特定的关系。

    所以你应该把你的 auery 变成这样的东西:

    CALL apoc.periodic.commit("
      MATCH (pl:pickup_location)
      WHERE NOT (p1)-[:LINKS->(:spatialNode) // Change this according to the spatial model
      WITH p1 AS node LIMIT $limit
      WITH collect(node) AS pickup 
        CALL spatial.addNodes('nyc',pickup) YIELD count 
        RETURN count",
      {limit:1000}
    )
    

    apoc.periodic.iterate 上的问题只是内存问题,你没有足够的 RAM 来执行事务。

    你有两个解决方案:

    • 通过增加 Neo4j 的堆大小为 Neo4j 提供更多 RAM(参见 neo4j.conf 文件)
    • 减小batch的大小,10000有点大,改成1000

    【讨论】:

    • 我在commit() 的查询中没有看到limit 的用法。与apoc.periodic.iterate() 不同,您必须显式添加limit 的用法。特别是对于此查询,limit 的位置很重要,因为您要收集到 1 行,因此要使其有效,您需要在执行 collect() 的 WITH 子句之前有 WITH pl LIMIT {limit}
    • 我已经更新了我的回复 :) 谢谢指出我这个缺失的部分
    【解决方案2】:

    由于我没有 50 人的代表,我无法发表评论,但 logisima 是正确的,只是为了补充他们的答案......“哪里不是”子句应该是:

    where not (p1)-[:RTREE_REFERENCE]-() 
    

    RTREE_REFERENCE 是将节点添加到空间层时创建的关系。

    【讨论】:

      猜你喜欢
      • 2015-06-15
      • 2016-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-19
      相关资源
      最近更新 更多