Gremlin repeatMode クエリヒント - Amazon Neptune

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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 (デフォルト)

幅優先 (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)

ここでは、次のソリューションを探す前に、最大深度まで個別のソリューションに従います。