

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Sugerencia de consulta repeatMode de Gremlin
<a name="gremlin-query-hints-repeatMode"></a>

La sugerencia de consulta `repeatMode` de Neptune muestra cómo el motor de Neptune evalúa el paso `repeat()` en un recorrido de Gremlin: primero por amplitud, primero por profundidad o primero por profundidad fragmentada.

El modo de evaluación del paso `repeat()` es importante cuando se utiliza para encontrar o seguir una ruta, en lugar de simplemente repetir un paso un número limitado de veces.

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

La sugerencia de consulta `repeatMode` se especifica mediante la incorporación de un paso `withSideEffect` a la consulta.

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

**nota**  
Todos los efectos secundarios de las sugerencias de consulta Gremlin están precedidos por `Neptune#`.

**Modos disponibles**
+ `BFS`

  Búsqueda primero por amplitud.

  Modo de ejecución predeterminado para el paso `repeat()`. Obtiene todos los nodos del mismo nivel antes de profundizar en la ruta.

  Esta versión tiene un uso intensivo de la memoria y los límites pueden ser muy grandes. Existe un mayor riesgo de que la consulta se quede sin memoria y la cancele el motor de Neptune. Es lo que más se acerca a otras implementaciones de Gremlin.
+ `DFS`

  Búsqueda primero por profundidad.

  Sigue cada ruta hasta la profundidad máxima antes de pasar a la siguiente solución.

  Utiliza menos memoria. Puede proporcionar mejor rendimiento en situaciones como la búsqueda de una sola ruta desde un punto de partida con múltiples saltos.
+ `CHUNKED_DFS`

  Búsqueda primero por profundidad fragmentada.

  Un planteamiento híbrido que explora primero la profundidad del gráfico en fragmentos de 1.000 nodos, en lugar de 1 nodo (`DFS`) o todos los nodos (`BFS)`.

  El motor de Neptune obtendrá hasta 1000 nodos en cada nivel antes de profundizar más en la ruta.

  Se trata de un enfoque equilibrado entre la velocidad y el uso de la memoria. 

  También es útil si desea usar `BFS`, pero la consulta usa demasiada memoria.



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

En la siguiente sección se describe el efecto del modo de repetición en un recorrido Gremlin.

En Neptune, el modo predeterminado para el paso `repeat()` es realizar una estrategia de ejecución primero por amplitud (`BFS`) para todos los recorridos. 

En la mayoría de los casos, la TinkerGraph implementación usa la misma estrategia de ejecución, pero en algunos casos altera la ejecución de un recorrido. 

Por ejemplo, la TinkerGraph implementación modifica la siguiente consulta.

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

El paso `repeat()` de este recorrido se "despliega" en el siguiente recorrido, lo que resulta una estrategia de primero por profundidad (`DFS`).

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

**importante**  
El motor de consulta de Neptune no lo hace automáticamente.

Breadth-first (`BFS`) es la estrategia de ejecución predeterminada y es similar a la que se utiliza TinkerGraph en la mayoría de los casos. Sin embargo, existen ciertos casos donde se prefieren las estrategias primero por profundidad (`DFS`).

 

**BFS (predeterminado)**  
La estrategia de ejecución predeterminada es primero por amplitud (BFS) para el operador de `repeat()`.

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

El motor de Neptune explora a fondo las primeras fronteras de nueve saltos antes de buscar una solución de diez saltos. Esto es efectivo en muchos casos, como la consulta de la ruta más corta.

Sin embargo, en el ejemplo anterior, el recorrido sería mucho más rápido utilizando el modo de primero por profundidad (`DFS`) para el operador (`repeat()`).

**DFS**  
La siguiente consulta utiliza el modo de primero por profundidad (`DFS`) para el operador `repeat()`.

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

Sigue cada solución individual hasta la máxima profundidad antes de explorar la siguiente solución. 