

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Hint di query Gremlin repeatMode
<a name="gremlin-query-hints-repeatMode"></a>

L'hint di query Neptune `repeatMode` specifica come il motore Neptune valuta il passaggio `repeat()` in un attraversamento Gremlin: breadth first, depth first o chunked depth first.

La modalità di valutazione del passaggio `repeat()` è importante quando si usa per trovare o seguire un percorso, anziché ripetere un passaggio per un numero limitato di volte.

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

L'hint di query `repeatMode` si specifica aggiungendo un passaggio `withSideEffect` alla query.

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

**Nota**  
Tutti gli hint di query Gremlin sono preceduti da `Neptune#`.

**Modalità disponibili**
+ `BFS`

  Breadth-First Search

  Modalità di esecuzione predefinita del passaggio `repeat()`. In tal modo si ottengono tutti i nodi di pari livello prima di procedere lungo il percorso.

  Questa versione richiede molta memoria e le frontiere possono diventare molto grandi. Esiste un rischio elevato che la query esaurisca la memoria e venga annullata dal motore Neptune. Questo caso si applica più strettamente ad altre implementazioni Gremlin.
+ `DFS`

  Depth-First Search

  Segue ogni percorso alla profondità massima prima di passare alla soluzione successiva.

  Questa soluzione utilizza meno memoria. Può fornire prestazioni migliori in situazioni quali la ricerca di un singolo percorso partendo da un hop multiplo.
+ `CHUNKED_DFS`

  Chunked Depth-First Search

  Un approccio ibrido che esplora il grafo depth-first in blocchi di 1.000 nodi, invece di 1 nodo (`DFS`) o tutti i nodi (`BFS)`.

  Il motore Neptune ottiene fino a 1.000 nodi a ogni livello prima di avanzare nel percorso.

  Questo è un approccio equilibrato tra velocità e utilizzo della memoria. 

  È utile anche se vuoi usare `BFS`, ma la query sta usando troppa memoria.



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

La sezione seguente descrive l'effetto della modalità di ripetizione su un attraversamento Gremlin.

In Neptune la modalità predefinita per il passaggio `repeat()` è eseguire una strategia di esecuzione breadth-first (`BFS`) per tutti gli attraversamenti. 

Nella maggior parte dei casi, l' TinkerGraph implementazione utilizza la stessa strategia di esecuzione, ma in alcuni casi altera l'esecuzione di un attraversamento. 

Ad esempio, l' TinkerGraph implementazione modifica la seguente query.

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

Il passaggio `repeat()` in questo attraversamento sarà "svolto" nell’attraversamento seguente, che risulta in una strategia depth-first (`DFS`).

```
g.V(<id>).out().out().out().out().out().out().out().out().out().out().limit(1).path()
```

**Importante**  
Il motore di query Neptune non esegue l'operazione automaticamente.

Breadth-first (`BFS`) è la strategia di esecuzione predefinita ed è simile nella maggior parte dei casi. TinkerGraph Tuttavia, vi sono alcuni casi in cui sono preferibili delle strategie depth-first (`DFS`).

 

**BFS (impostazione predefinita)**  
Breadth-first (BFS) è la strategia di esecuzione predefinita per l'operatore `repeat()`.

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

Il motore Neptune esplora le prime frontiere a nove hop prima di trovare una soluzione a dieci hop. Questa soluzione è efficace in molti casi, come per una query del percorso più breve.

Tuttavia, per l'esempio precedente l'attraversamento sarebbe molto più veloce usando la modalità depth-first (`DFS`) per l'operatore `repeat()`.

**DFS**  
La seguente query utilizza la modalità depth-first (`DFS`) per l'operatore `repeat()`.

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

Ogni singola soluzione viene seguita fino alla profondità massima prima di esplorare la soluzione successiva. 