Neo4j 3.5 查询性能问题
Neo4j 3.5 Query Performance Issue
我在 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
并且我在 属性(name) 和上面的查询 运行 上有标签(应用程序)的索引超过 100k nodes.But 查询是 运行 更长时间并消耗大量内存。
请帮助我提高性能。
您没有在此查询中使用 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, total, errorMessages
我在 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
并且我在 属性(name) 和上面的查询 运行 上有标签(应用程序)的索引超过 100k nodes.But 查询是 运行 更长时间并消耗大量内存。
请帮助我提高性能。
您没有在此查询中使用 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, total, errorMessages