翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Gremlin repeatMode クエリヒント
NeptunerepeatMode
クエリヒントは、Neptune エンジンが Gremlin トラバーサル (幅優先、深さ優先、チャンク深さ優先) のrepeat()
ステップを評価する方法を指定します。
repeat()
ステップの評価モードは、パスを探したりパスに従ったりするために使用される場合、単に制限回数までステップを繰り返すことよりも重要です。
構文
repeatMode
クエリヒントは、クエリに withSideEffect
ステップを追加して指定します。
g.withSideEffect('Neptune#repeatMode', '
mode
').gremlin-traversal
注記
すべての Gremlin クエリヒントの副作用にはプレフィックス Neptune#
が付けられます。
利用可能なモード
-
BFS
幅優先検索
repeat()
ステップのデフォルトの実行モードです。これにより、パスに沿って深くなる前にすべての兄弟ノードを取得します。このバージョンはメモリを大量に消費し、領域が非常に大きくなる可能性があります。クエリがメモリ不足になって、Neptune エンジンによりキャンセルされるリスクが高くなります。これは他の Gremlin 実装に最も適合します。
-
DFS
深さ優先検索
次のソリューションに移る前に最大深度への各パスに従います。
メモリ使用量は少なくなります。複数のホップ外の開始点から単一のパスを検索するような状況では、パフォーマンスが向上する可能性があります。
-
CHUNKED_DFS
チャンク深さ優先検索
1 個のノード (
DFS
) またはすべてのノード (BFS)
ではなく、1,000 個のノードのチャンクでグラフ深さ優先を調べるハイブリッドアプローチです。Neptune エンジンは、より深くパスに従う前に各レベルで最大 1,000 個のノードを取得します。
これは、速度とメモリ使用量のバランスが取れたアプローチです。
また、
BFS
を使用する場合に便利ですが、このクエリはメモリを過度に使用しています。
例
次のセクションでは、Gremlin トラバーサルに対する繰り返しモードの効果について説明します。
Neptune では、repeat()
ステップのデフォルトモードは、すべてのトラバーサルに対して幅優先 (BFS
) 実行戦略を行うことになっています。
ほとんどの場合、 TinkerGraph 実装は同じ実行戦略を使用しますが、トラバーサルの実行を変更する場合もあります。
例えば、 TinkerGraph 実装は次のクエリを変更します。
g.V("
3
").repeat(out()).times(10).limit(1).path()
このトラバーサルの repeat()
ステップは次のトラバーサルに「アンロール」され、深さ優先 (DFS
) 戦略になります。
g.V(<id>).out().out().out().out().out().out().out().out().out().out().limit(1).path()
重要
Neptune クエリエンジンでは、これは自動的に実行されません。
ブレッドファースト (BFS
) はデフォルトの実行戦略であり、 TinkerGraph ほとんどの場合 に似ています。ただし、深さ優先 (DFS
) 戦略が望ましい場合があります。
BFS (デフォルト)
Breadth-first (BFS) は、repeat()
演算子のデフォルトの実行戦略です。
g.V("
3
").repeat(out()).times(10).limit(1).path()
Neptune エンジンは、10 のホップまでソリューションを見つける前に、最初の 9 つのホップ領域を完全に探します。これは、最短パスのクエリなど多くの場合で効果的です。
ただし、前述の例では、repeat()
演算子の深さ優先 (DFS
) モードを使用するとトラバーサルははるかに高速になります。
DFS
次のクエリでは、repeat()
演算子の深さ優先 (DFS
) モードを使用します。
g.withSideEffect("Neptune#repeatMode", "DFS").V("
3
").repeat(out()).times(10).limit(1)
ここでは、次のソリューションを探す前に、最大深度まで個別のソリューションに従います。