

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

# Gremlin repeatMode クエリヒント
<a name="gremlin-query-hints-repeatMode"></a>

Neptune`repeatMode` クエリヒントは、Neptune エンジンが Gremlin トラバーサル (幅優先、深さ優先、チャンク深さ優先) の`repeat()` ステップを評価する方法を指定します。

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

## 構文
<a name="gremlin-query-hints-repeatMode-syntax"></a>

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



## 例
<a name="gremlin-query-hints-repeatMode-example"></a>

次のセクションでは、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 クエリエンジンでは、これは自動的に実行されません。

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)
```

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