【问题标题】:Optimize Neo4j cypher query on huge dataset在庞大的数据集上优化 Neo4j 密码查询
【发布时间】:2022-01-18 18:27:52
【问题描述】:

以下查询无法在具有约 2M 个节点的数据集上运行。我应该怎么做才能让它运行得更快?

MATCH (cc:ConComp)-[r1:IN_CONCOMP]-(p1:Person)-[r2:SAME_CLUSTER]-(p2:Person)
            WHERE cc.cluster_type = "household"
            MERGE (cluster:Cluster {CLUSTER_TMP_ID:cc.CONCOMP_ID + '|' + r2.root_id, cluster_type:cc.cluster_type })
            MERGE (cluster)-[r3:IN_CLUSTER]-(p1)

【问题讨论】:

    标签: performance neo4j cypher query-optimization graph-databases


    【解决方案1】:

    一些建议:

    • 为您的关系添加方向将减少 MATCH 中的路径数量
    • 确保您对合并的所有属性都有索引
    • 在第二个 MERGE 中,还要添加方向。

    【讨论】:

      【解决方案2】:

      我终于通过使用以下查询(并通过索引 cc.cluster_type 和 cc.CONCOMP_ID)找到了解决方案:

      CALL apoc.periodic.iterate('MATCH (cc:ConComp)<-[r1:IN_CONCOMP]-(p1:Person)-[r2:SAME_CLUSTER]-(p2:Person) WHERE cc.cluster_type = "household" WITH DISTINCT cc.CONCOMP_ID + "|" + r2.root_id as id_name, cc.cluster_type as cluster_type_name, p1 RETURN id_name, cluster_type_name, p1', '
                  MERGE (cluster:Cluster {CLUSTER_TMP_ID: id_name, cluster_type: cluster_type_name}) 
                       
                  MERGE (cluster)-[r3:IN_CLUSTER]->(p1)', {batchSize:10000, parallel:false})
      

      我准确地说,我之前使用apoc.periodic.iterate 运行了我的初始问题查询但没有成功。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-20
        • 1970-01-01
        • 2015-12-16
        • 2018-03-07
        • 1970-01-01
        • 2013-04-04
        • 1970-01-01
        相关资源
        最近更新 更多