2

簡単に言えば、私の質問は、Neo4j で使用されるトラバーサル ロジックを変更できるかどうかです。到達可能性の計算中に、どのエッジがトラバースされ、どのエッジがトラバースされないかを制御する方法です。

完全な説明:

現在の DB から neo4j への移行を検討していますが、neo4j が次のタスクに適しているかどうか疑問に思っています。

約 10M の単純なノードを持つ大きなグラフがあります。それらの属性は単一の ID のみです。
エッジも「スタンダード」「オープン」「クロージング」の3種類をご用意。「オープニング」と「クロージング」も「色」属性を持っているので、一致させます。各「開始」エッジには、一致する「終了」エッジが 1 つだけあります。たとえば、「3」の色の開始エッジが 1 つあるため、同じ色の終了エッジも 1 つあります。

トラバーサルのルールがかなり単純な 2 つのノード間の到達可能性を解決する必要があります。通常のエッジを好きなように通過したり、開いているエッジを好きなように通過したりできます。スタックしますが (これはトリッキーな部分です)、いくつかの「閉じた」エッジがあるジャンクションに到達した場合は、最後に遭遇した「開いた」エッジと一致する閉じたエッジを通過し、その「開いた」エッジをスタック。

例えば:

a -[STANDARD]->B-[Open color:3]->C-[Standard]->D-[Close color:3]->E
および
D-[Close color:4]->F

D には、色の異なる 2 つの「閉じた」エッジがあることに注意してください。上記で定義されたルールにより、カラー スタックの一番上に [3] があるため、E は A から到達可能です。
ただし、F は A から到達できません。

このようなグラフ トラバーサル ロジック用に neo4j を構成できますか? ありがとう!!

4

1 に答える 1

0

これは、独自の PathExpander を実装し、TraversalDescription に渡すことで可能になります。Michael Hunger が指摘したように、BranchState を使用してエキスパンダーを最適化できるため、展開ごとにフル パスを確認する必要はありませんが、代わりに、各トラバーサル ブランチが運ぶある種の煮詰められた (不変の心) 状態になります。エキスパンダーは、変更された状態を次の各ステップに渡すことができます。

残念ながら、neo4j のマニュアルには、ブランチ状態を使用する良い例がありません。これは素晴らしい使い方のように聞こえますが!

于 2013-01-09T13:41:09.523 に答える