如何解决Neo4j 3.5 查询性能问题
我在 neo4j (community 3.5) 中运行了以下查询
MATCH (a:master_node:PERF:Application)-[r1]->(n:master_node:PERF)-[r:AFFINITY]->(m:master_node:PERF)<-[r2]-(a1:master_node:PERF:Application)
WHERE exists(n.latest_ingestion)
AND exists(m.latest_ingestion)
AND id(a) <> id(a1)
MERGE (a)<-[:APP_AFFINITY]-(a1)
我对neo4j的配置如下:
heap_size : 8GB
page_cache : 4GB
并且我在属性(名称)和上面的查询上有标签(应用程序)的索引,运行超过 10 万个节点。但是查询运行的时间更长,消耗了大量内存。
请帮助我提高性能。
解决方法
您没有在此查询中使用 name
属性,因此您的索引无济于事。唯一可能有帮助的索引是 :master_node(latest_ingestion)
或 :PERF(latest_ingestion)
,这可能会将查询从使用标签扫描更改为索引扫描,具体取决于数据库统计信息。
此外,您可能需要考虑批处理这些更新,可能使用 APOC 过程中的 apoc.periodic.iterate()
。类似的东西:
CALL apoc.periodic.iterate("
MATCH (a:master_node:PERF:Application)-->(n:master_node:PERF)-[:AFFINITY]->(m:master_node:PERF)<--(a1:master_node:PERF:Application)
WHERE exists(n.latest_ingestion)
AND exists(m.latest_ingestion)
AND id(a) <> id(a1)
RETURN a,a1","MERGE (a)<-[:APP_AFFINITY]-(a1)",{}) YIELD batches,total,errorMessages
RETURN batches,errorMessages
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。