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