

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Gremlin repeatMode 查詢提示
<a name="gremlin-query-hints-repeatMode"></a>

Neptune `repeatMode` 查詢提示指定 Neptune 引擎如何在 Gremlin 周遊中評估 `repeat()` 步驟：廣度優先、深度優先或區塊深度優先。

當 `repeat()` 步驟的評估模式用於尋找或遵循路徑，而不只是在有限時間內重複單一步驟時，此模式很重要。

## 語法
<a name="gremlin-query-hints-repeatMode-syntax"></a>

將 `withSideEffect` 步驟加入查詢中，即可指定 `repeatMode` 查詢提示。

```
g.withSideEffect('Neptune#repeatMode', '{{mode}}').{{gremlin-traversal}}
```

**注意**  
所有 Gremlin 查詢提示的副作用皆加上 `Neptune#` 字首。

**可用模式**
+ `BFS`

  廣度優先搜尋

  `repeat()` 步驟的預設執行模式。會先取得所有同級節點，再進入更深的路徑。

  這個模式會佔用非常大量記憶體，領域可能變得非常龐大。查詢用盡記憶體而被 Neptune 引擎取消的風險更高。這最符合其他 Gremlin 實作。
+ `DFS`

  深度優先搜尋

  依循每個路徑到最大的深度，再移到下一個解決方案。

  這會使用較少的記憶體。在要從多個躍點中開始尋找單一路徑的情況下，這可以提供更好的效能。
+ `CHUNKED_DFS`

  區塊深度優先搜尋

  一種混合的方法，會在 1,000 個節點的區塊中進行深度優先的圖形探索，而不是在1 個節點 (`DFS`) 或所有節點 (`BFS)`) 中探索。

  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 查詢引擎不會自動執行此操作。

廣度優先 (`BFS`) 是預設的執行策略，在大多數情況下類似 TinkerGraph。不過，有些案例則偏好使用深度優先 (`DFS`) 策略。

 

**BFS (預設值)**  
廣度優先 (BFS) 是 `repeat()` 運算子的預設執行策略。

```
g.V("{{3}}").repeat(out()).times(10).limit(1).path()
```

Neptune 引擎會先探索完前九個躍點的領域，再尋找十個躍點的解決方案。在許多情況下，這非常有效，例如短路徑查詢。

不過，在上述範例中，使用 `repeat()` 運算子的深度優先 (`DFS`) 模式周遊會更快。

**DFS**  
以下查詢的 `repeat()` 運算子會使用深度優先 (`DFS`) 模式。

```
g.withSideEffect("Neptune#repeatMode", "DFS").V("{{3}}").repeat(out()).times(10).limit(1)
```

這會依循每個個別解決方案到最大的深度，再探索下一個解決方案。