2016-11-04 7 views
1

私は、異なるノードが有向関係で接続されたneo4jグラフを持っています。このグラフにはサイクルが含まれています。私は、ターゲットエンティティのセットに対する与えられたエンティティのセットについて、この関係を持つ最大のパスのすべてのエンティティを見つけたいと思います。私が使用しているクエリは以下の通りです。 注:サンプルグラフのノード数= 1000、リレーションシップ= 2500、深度=無限大です。また、私たちの最後のグラフは25000サイファークエリを使用して無限深度の巨大サイクリックneo4j有向グラフで最大の経路を見つける

match (n:dataEntity) where id(n) in 
[28, 4, 27, 151, 34, 36, 57, 59, 71, 73, 75, 119, 121, 140, 142, 144] 
match (d:dataEntity) where NOT (d)-[:dependsOn]->(:dataEntity) 
with distinct d ,n 
match res =(n)-[:dependsOn*]->(d) 
with d,n,nodes(res) as x 
return x 

件までのノードを含むことができ、このクエリでの問題は、我々は不確実な深さのために行くされているとして、それはすなわち、20分以上をあまりにも多くの時間がかかっている細かい点で最大深さ5を動作しますが、ということです。 事前情報ありがとうございました。さらに詳しい情報が必要な場合は元に戻してください。

答えて

2

基本的な問題は、不当に高価なクエリを実行しようとしていることです。 dataEntityノードは、最大2500 の長さを有することができ、約2.5発信関係

  • 任意のノードdに任意のノードnからのパスの平均を有する

    • :データ特性に基づい

    たとえば、ある特定のパス(おそらく非常に多数の可能なパスのうちの1つ)を具体的なものからnまでの1つの特定のものdの長さは500です。その単一パスを見つけるには、操作数は(2.5^500)、または約10^199となります。

    あなたがしようとしていることを再考し、あなたが望むことを行うより巧妙な方法があるかどうかを確認する必要があります。おそらく、データモデルを変更することは役に立ちますが、すべてがユースケースに依存します。

  • 関連する問題