我有一个Neo4j项目,其中包含100k个节点和5m个关系。 我的问题: 诸如“最短路径”之类的算法需要2-4毫秒才能找到最短路径。
MATCH p = shortestPath((p1:Person{nickname:"sievers_amara"})-
[:follows*..5]->(p2:Person{nickname:"burghardt_giulia"}))
WHERE p1 <> p2
RETURN p
但是我的算法来找出2个节点之间是否存在路径大约需要200毫秒... 找到最短的路径比发现是否有路径要困难得多。 这是我的代码,以确定是否存在路径:
MATCH p=(p1:Person{nickname:"sievers_amara"})-[r:follows*1..5]->(p2:Person{nickname:"burghardt_giulia"})
WHERE p1 <> p2
RETURN p LIMIT 1
我可以改善什么?
答案 0 :(得分:3)
shortestPath()
使用breadth-first进行扩展,因此它正在使用最快的方法来检测路径的存在,并且一旦找到第一个路径,它就不会继续扩展。
可变长度扩展使用depth-first扩展,因此,即使到所讨论节点的路径很短,也无法保证先探索短路径,因此在这种情况下,我们尝试了许多路径(并且发现不匹配)在找到第一个匹配项之前(并且该匹配项的路径可能根本不是最短的路径)。