Neoに5億のノードとエッジを持つグラフがあります。スーパーノードを避ける2つのノード間の最短経路を見つけたいと思います(スーパーノードを持つパスよりも長い場合でも)。Neo4jのスーパーノードのない最短経路
以下のクエリは、小さいグラフの罰金に動作しますが、決して私が扱っていたサイズのグラフの終了:
MATCH (n:Node { id:'123'}),(m:Node { id:'234' }), p = shortestPath((n)-[*..6]-(m))
WHERE NONE(x IN NODES(p) WHERE size((x)--())>1000)
RETURN p
句それは超高速でWHERE私が削除した場合。通常、秒未満です。
どのように高速化できますか?ノードの度合いを事前に計算し、それらを索引付けすると役立つでしょうか?私はスーパーノードに隣接するものとは別にすべての辺を複製して、それらに新しいラベルを与え、WHERE句のない最短のパスのクエリにそれらを使用することに頼るべきですか?その他の提案はありますか?
? どこにもない(xのノード(p)WHEREサイズ((x) - ())> 1000) –
良い点。申し訳ありませんが、実際にはWHERE句にラベルを付けずにテストしていました。最初のラベルではエラーです。 2番目のラベルは違いはありません。私の質問を更新してラベルを削除しましょう。参照のためにそれはもともとこのように見えた: WHERE NONE(x:ノードのNODES(p)WHEREサイズ((x:ノード) - ())> 1000) – Tom