グレムリン RepeatMode クエリヒント - Amazon Neptune

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

グレムリン RepeatMode クエリヒント

NeptunerepeatModeクエリヒントは、Neptune エンジンが評価する方法を指定しますrepeat()ステップを実行します。幅優先、深さ優先、チャンク深さ優先。

repeat() ステップの評価モードは、パスを探したりパスに従ったりするために使用される場合、単に制限回数までステップを繰り返すことよりも重要です。

Syntax

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 を使用する場合に便利ですが、このクエリはメモリを過度に使用しています。

Example

次のセクションでは、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()
重要

Nptune クエリエンジンでは、これは自動的に実行されません。

Breadth-first (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)

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