Neo4j - 如何改善查询执行时间(服务器消耗)?

时间:2017-08-23 14:06:24

标签: neo4j cypher

我使用Neo4j数据库(通过docker访问),具有177,000,000个节点和352,000,000个关系。这是我想要改进的示例查询:

MATCH (a:NodeA {prop1: $prop1})<-[:BA]-(b:NodeB)-[:BC]->(c:NodeC)-[:CD]->(d:NodeD)-[:DE]->(e:NodeE)
RETURN e.prop2, a.prop1, a.prop3, c.prop4, c.prop5, b.prop6;

prop1上有一个索引。

我使用python v1驱动程序来测量查询执行时间。 ResultSummary中有两个不同的时间:

  • 服务器将结果用于消费所花费的时间(我称之为&#39;可用&#39;时间)
  • 服务器消耗结果所花费的时间(我称之为消费&#39;时间)

我的查询内容很短&#39;时间(1到80毫秒),但非常大的消费&#39;时间(最多350000毫秒)。

我试图通过使用参数来优化查询,并且我更改了一些内存配置(增加了页面缓存大小和减小的堆大小),这导致更短的“可用”和#39;时间(1到15毫秒)以及更短的消费量#39;次(20000至250000毫秒)。 不幸的是,消费时间仍然非常高!

我的问题:

  • 我不太清楚这两种时间措施之间的区别。他们测量了什么?
  • 如何改进查询? (除了索引)

谢谢你, Reima

1 个答案:

答案 0 :(得分:1)

为了回答您的第一个问题,我猜测响应是流式的,因此可用时间是第一个记录到达时的消耗时间是收到并处理完整结果集的时间,收到的最后一个记录和收到的第一个记录之间有一些时间差。如果我的假设结果是错误的,我道歉。 要回答第二个问题,尽可能在内存缓存中保留数据,或者如果不能选择高RAM,请使用SSD。以下链接可能有所帮助。

1)Linux file system tuning

2)Memory tuning

3)Disk and ram considerations