Neo4j 3.5查询性能问题



我有以下查询运行在neo4j(社区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

和我对属性(名称)和以上查询运行超过100k节点的标签(应用程序)的索引。但是查询运行的时间长了,占用了太多的内存。

请帮助我提高性能。

您没有在此查询中使用name属性,因此您的索引没有帮助。唯一可能有帮助的索引是在:master_node(latest_ingestion):PERF(latest_ingestion)上,这可能会根据db统计数据将查询从使用标签扫描更改为索引扫描。

另外,您可能想要考虑批处理这些更新,可能使用来自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, total, errorMessages

最新更新