今、私はNeo4jを使用しており、間違った側からタスクを解決しています。 最初に私はallShortestPaths
を取得し、javaでそれらの中で正しいものを検索します。 もちろん、この方法でも結果が保証されるわけではありません。 私は、必要なものをネイティブに検索できるグラフDBMSを探しています。複雑な基準を持つ最短パスは、どのグラフでも可能です。DBMS
データモデルは単純です:
ノード:数
関係の識別以外にはプロパティ:それを明確にするダブル値
で1つのプロパティを - それは彼らが互いに所有する組織と株式のリスト(すなわち、プロパティ=パーセンテージ> 0 < = 100) 。
基準経路を通過するときである:次の関係ノードが含まれている++ 50
- 場合(パスが続く)
- 次関係は、その後、50以下である場合、そのパスに既にすべてのノードこのノードの自身 50+、次いでまだ経路が
を継続これは、アルゴリズムは、パス自体の関係が、好ましくは、必ずしも「側」関係(だけ「次の関係だけでなく、計算する必要があることを意味"は50です - )。
最後に、ネイティブの最短パス(つまり、18ミリノードで数ミリ秒+ 40ミリリットルのリレーションシップ)のパフォーマンスが期待されます。数時間または数分ではありません。今、shortestpathは30-40-50ホップのパスをミリ秒単位で見つけます。それは素晴らしいことです。リレーション値で遊ぶ私はいくつかの長さの最短パスを数秒で得ることができます。しかし、これは理想的な解決策ではありません。
私はこれまでに発見したことから、Neo4jのエキスパートではありません - allsSortestPaths
のパフォーマンスはやや厚いものです。余分な条件を追加すると、パフォーマンスがミリ秒から数時間に低下する可能性があります。それは許されません:(10 ++のパスの長さも必見です。
私は推測、私はあまりしたいが、まだ、任意のヒント、アイデア、ソリューションは歓迎されていることを!