消除关系方向的Neo4j显着花费更多时间

时间:2018-02-07 12:35:32

标签: neo4j cypher

我有2个查询,这些查询占用了大量不同的时间。在Cypher的关系中我不明白这个问题

不到1秒,结果为5:

allshortestpaths((et)-[*]->(st))

不到1秒,结果为3:

allshortestpaths((et)<-[*]-(st))

永远(超时):

allshortestpaths((et)-[*]-(st))

为什么这需要永远。我认为这只需返回8个结果!!

完整的样本查询:

profile match (s:Stop)--(st:Stoptime),     
              (e:Stop)--(et:Stoptime)  
              where s.name IN [ 'Schlump', 'U Schlump']     
              and e.name IN [ 'Hamburg Hbf', 'Hauptbahnhof Nord']         
              match p = allshortestpaths((et)-[*]->(st))      
              return p

1 个答案:

答案 0 :(得分:1)

使用allshortestpaths((et)-[*]->(st)),您将看到如下所示的路径:(a)-->(b)-->(c)-->(d)

使用allshortestpaths((et)<-[*]-(st)),您将看到一条如下所示的路径:(a)<--(b)<--(c)<--(d)

使用allshortestpaths((et)<-[*]-(st)),您将拥有如下所示的路径:

  • (a)-->(b)-->(c)-->(d)
  • (a)<--(b)<--(c)<--(d)
  • (a)-->(b)<--(c)-->(d)
  • (a)<--(b)<--(c)-->(d)
  • (a)-->(b)-->(c)<--(d)
  • (a)-->(b)<--(c)--<(d)

你们有分歧吗?最后一个是比以前更复杂的查询,这就是为什么它可能需要很长时间,特别是当你没有指定关系类型和路径的最大深度时。

因此,您可以要求Neo4j遍历您的所有数据库......