

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.

# Uso de flujos de Neptune
<a name="streams-using"></a>

Con la característica de flujos de Neptune, puede generar una secuencia completa de entradas de registros de cambios que capten cada cambio realizado en los datos de gráficos a medida que se produzca. Para obtener información general sobre esta característica, consulte [Captura de cambios de gráficos en tiempo real con flujos de Neptune](streams.md).

**Topics**
+ [Habilitación de flujos de Neptune](streams-using-enabling.md)
+ [Deshabilitación de flujos de Neptune](streams-using-disabling.md)
+ [Llamada a la API de REST de flujos de Neptune](streams-using-api-call.md)
+ [Formato de respuesta de la API de flujos de Neptune](streams-using-api-reponse.md)
+ [Excepciones de la API de flujos de Neptune](streams-using-api-exceptions.md)

# Habilitación de flujos de Neptune
<a name="streams-using-enabling"></a>

Puede habilitar o deshabilitar los flujos de Neptune en cualquier momento estableciendo el parámetro del clúster de la base de datos [`neptune_streams`](parameters.md#parameters-db-cluster-parameters-neptune_streams). Al establecer el parámetro en `1`, se habilita Streams, y al definirlo en `0`, se deshabilita Streams.

**nota**  
Una vez que haya cambiado el parámetro del clúster de base de datos `neptune_streams`, debe reiniciar todas las instancias de base de datos del clúster para que el cambio se aplique.

Puede configurar el parámetro de clúster de base de datos [neptune\$1streams\$1expiry\$1days](parameters.md#parameters-db-cluster-parameters-neptune_streams_expiry_days) para controlar cuántos días, de 1 a 90, permanecerán los registros de flujos en el servidor antes de eliminarlos. El valor predeterminado es 7.

Los flujos de Neptune se introdujeron inicialmente como una característica experimental que se habilitaba o deshabilitaba en el modo de laboratorio mediante el parámetro `neptune_lab_mode` del clúster de base de datos (consulte [Modo de laboratorio de Neptune](features-lab-mode.md)). El uso del modo lab para habilitar Streams ahora está obsoleto y se deshabilitará en el futuro.

# Deshabilitación de flujos de Neptune
<a name="streams-using-disabling"></a>

Puede deshabilitar los flujos de Neptune en cualquier momento en que se esté ejecutando.

Para desactivar Streams, actualice el grupo de parámetros de clúster de base de datos para que el valor del parámetro `neptune_streams` se establezca en 0.

**importante**  
En cuanto se desactive Streams, no podrá obtener acceso a los datos del registro de cambios. Asegúrese de leer lo que le interesa *antes* de desactivar Streams.

# Llamada a la API de REST de flujos de Neptune
<a name="streams-using-api-call"></a>

Puede acceder a los flujos de Neptune mediante una API de REST que envía una solicitud HTTP GET a uno de los siguientes puntos de conexión locales:
+ Para una base de datos de gráficos SPARQL:   `https://Neptune-DNS:8182/sparql/stream`.
+ Para una base de datos de gráficos de Gremlin u openCypher: `https://Neptune-DNS:8182/propertygraph/stream` o `https://Neptune-DNS:8182/pg/stream`.

**nota**  
El punto final de transmisión de Gremlin (`https://Neptune-DNS:8182/gremlin/stream`) está en desuso, junto con el formato de salida asociado (). `GREMLIN_JSON` Sigue siendo compatible con versiones anteriores, pero es posible que se elimine en futuras versiones.

Solo se permite una operación `GET` HTTP.

Neptune admite la compresión `gzip` de la respuesta, siempre que la solicitud HTTP incluya un encabezado `Accept-Encoding` que especifique `gzip` como formato de compresión aceptado (es decir, `"Accept-Encoding: gzip"`).

**Parameters**
+ `limit`: largo, opcional. Rango: 1–100 000. Predeterminado: 10.

  Especifica el número máximo de registros que se van a devolver. También existe un límite de tamaño de 10 MB en la respuesta que no se puede modificar y que prevalece sobre el número de registros especificado en el parámetro `limit`. La respuesta incluye un registro de incumplimiento de umbral si se alcanzó el límite de 10 MB.
+ `iteratorType`: cadena, opcional.

  Este parámetro puede tener uno de los siguientes valores:
  + `AT_SEQUENCE_NUMBER` (predeterminado): indica que la lectura debe comenzar con el número de secuencia de eventos especificado conjuntamente por los parámetros `commitNum` y `opNum`.
  + `AFTER_SEQUENCE_NUMBER`: indica que la lectura debe comenzar justo después del número de secuencia de eventos especificado conjuntamente por los parámetros `commitNum` y `opNum`.
  + `TRIM_HORIZON`: indica que la lectura debe comenzar en el último registro no recortado del sistema, que es el registro más antiguo que no ha caducado (aún no se ha eliminado) del flujo de registro de cambios. Este modo es útil durante el inicio de la aplicación, cuando no tiene un número secuencial de evento inicial específico.
  + `LATEST`: indica que la lectura debe comenzar en el registro más reciente del sistema, que es el último registro que no ha caducado (aún no se ha eliminado) del flujo de registro de cambios. Esto resulta útil cuando es necesario leer los registros de la parte superior actual de los flujos para no procesar registros antiguos, por ejemplo, durante una recuperación de desastres o una actualización sin tiempo de inactividad. Tenga en cuenta que, en este modo, solo se devuelve como máximo un registro.
+ `commitNum`: largo, obligatorio cuando iteratorType es `AT_SEQUENCE_NUMBER` o `AFTER_SEQUENCE_NUMBER`.

  El número de confirmación del registro de inicio que se va a leer del flujo de registro de cambios.

  Este parámetro se omite cuando `iteratorType` es `TRIM_HORIZON` o `LATEST`.
+ `opNum`: largo, opcional (el valor predeterminado es `1`).

  El número secuencial de la operación dentro de la confirmación especificada desde la que empezar a leer en los datos del flujo de registro de cambios.

Por lo general, las operaciones que cambian los datos de gráficos SPARQL solo generan un único registro de cambios por operación. Sin embargo, las operaciones que cambian los datos de gráficos de Gremlin pueden generar varios registros de cambio por operación, como en los siguientes ejemplos:
+ `INSERT`: un vértice de Gremlin puede tener varias etiquetas y un elemento de Gremlin puede tener varias propiedades. Se genera un registro de cambio independiente para cada etiqueta y propiedad cuando se inserta un elemento.
+ `UPDATE`: cuando se modifica una propiedad de un elemento de Gremlin, se generan dos registros de cambios: el primero para eliminar el valor anterior y el segundo para insertar el nuevo valor.
+ `DELETE`: se genera un registro de cambios independiente para cada propiedad del elemento que se elimina. Por ejemplo, cuando se elimina un borde Gremlin con propiedades, se genera un registro de cambio para cada una de las propiedades y, a continuación, se genera uno para la eliminación de la etiqueta de borde.

  Cuando se elimina un vértice Gremlin, se eliminan primero todas las propiedades de borde de entrada y salida, después las etiquetas de borde, a continuación las propiedades de vértice y, por último, las etiquetas de vértice. Cada una de estas eliminaciones genera un registro de cambios.

# Formato de respuesta de la API de flujos de Neptune
<a name="streams-using-api-reponse"></a>

Una respuesta a una solicitud de la API de REST de los flujos de Neptune tiene los siguientes campos:
+ `lastEventId`: identificador de secuencia del último cambio en la respuesta del flujo. Un ID de evento se compone de dos campos: `commitNum` identifica una transacción que ha cambiado el gráfico y `opNum` identifica una operación específica dentro de dicha transacción. Esto se muestra en el siguiente ejemplo.

  ```
    "eventId": {
      "commitNum": 12,
      "opNum": 1
    }
  ```
+ `lastTrxTimestamp`: la hora a la que se solicitó la confirmación de la transacción, en milisegundos a partir de la fecha de inicio de Unix.
+ `format`: formato de serialización de los registros de cambios que se devuelven. Los valores posibles son `PG_JSON` para registros de cambios de Gremlin u openCypher y `NQUADS` para registros de cambios de SPARQL.
+ `records`: una matriz de registros de flujos de registro de cambios serializados incluidos en la respuesta. Cada registro de la matriz de `records` contiene los siguientes campos:
  + `commitTimestamp`: la hora a la que se solicitó la confirmación de la transacción, en milisegundos a partir de la fecha de inicio de Unix.
  + `eventId`: el identificador de secuencia del registro de cambios del flujo.
  + `data`— El registro serializado de Gremlin, SPARQL o change. OpenCypher Los formatos de serialización de cada registro se describen con más detalle en la siguiente sección, [Formatos de serialización en flujos de Neptune](streams-change-formats.md).
  + `op`: la operación que creó el cambio.
  + `isLastOp`: solo está presente si esta operación es la última de su transacción. Cuando está presente, se establece en `true`. Es útil para garantizar que se realice una transacción completa.
+ `totalRecords`: el número total de registros de la respuesta.

Por ejemplo, la siguiente respuesta devuelve los datos de cambios de Gremlin para una transacción que contiene más de una operación:

```
{
  "lastEventId": {
    "commitNum": 12,
    "opNum": 1
  },
  "lastTrxTimestamp": 1560011610678,
  "format": "PG_JSON",
  "records": [
    {
      "commitTimestamp": 1560011610678,
      "eventId": {
        "commitNum": 1,
        "opNum": 1
      },
      "data": {
        "id": "d2b59bf8-0d0f-218b-f68b-2aa7b0b1904a",
        "type": "vl",
        "key": "label",
        "value": {
          "value": "vertex",
          "dataType": "String"
        }
      },
      "op": "ADD"
    }
  ],
  "totalRecords": 1
}
```

La siguiente respuesta devuelve los datos de cambios de SPARQL de la última operación de una transacción (la operación identificada por `EventId(97, 1)` con el número de transacción 97).

```
{
  "lastEventId": {
    "commitNum": 97,
    "opNum": 1
  },
  "lastTrxTimestamp": 1561489355102,
  "format": "NQUADS",
  "records": [
    {
      "commitTimestamp": 1561489355102,
      "eventId": {
        "commitNum": 97,
        "opNum": 1
      },
      "data": {
        "stmt": "<https://test.com/s> <https://test.com/p> <https://test.com/o> .\n"
      },
      "op": "ADD",
      "isLastOp": true
    }
  ],
  "totalRecords": 1
}
```

# Excepciones de la API de flujos de Neptune
<a name="streams-using-api-exceptions"></a>

En la siguiente tabla, se describen las excepciones de los flujos de Neptune.


| Código de error | Código de HTTP | ¿Reintentar? | Mensaje | 
| --- | --- | --- | --- | 
| `InvalidParameterException` | 400 | No | Se ha proporcionado un out-of-range valor o no válido como parámetro de entrada. | 
| `ExpiredStreamException` | 400 | No | Todos los registros solicitados superan la edad máxima permitida y han caducado. | 
| `ThrottlingException` | 500 | Sí | Rate of requests exceeds the maximum throughput (La tasa de solicitudes supera el desempeño máximo). | 
| `StreamRecordsNotFoundException` | 404 | No | No se ha encontrado el recurso solicitado. Es posible que la secuencia no se especifique correctamente. | 
| `MemoryLimitExceededException` | 500 | Sí | The request processing did not succeed due to lack of memory, but can be retried when the server is less busy (El procesamiento de la solicitud no se ha realizado correctamente debido a la falta de memoria, pero se puede volver a intentar cuando el servidor no esté tan saturado). | 