在庞大的数据集上优化 Neo4j 密码查询
Posted
技术标签:
【中文标题】在庞大的数据集上优化 Neo4j 密码查询【英文标题】:Optimize Neo4j cypher query on huge dataset 【发布时间】: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)
【问题讨论】:
【参考方案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 运行了我的初始问题查询但没有成功。
【讨论】:
以上是关于在庞大的数据集上优化 Neo4j 密码查询的主要内容,如果未能解决你的问题,请参考以下文章