Uso de flujos de Neptune - Amazon Neptune

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

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.

Habilitación de flujos de Neptune

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. 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_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). El uso del modo lab para habilitar Streams ahora está obsoleto y se deshabilitará en el futuro.

Deshabilitación de flujos de Neptune

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

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

A partir de la versión 1.1.0.0 del motor, el punto de conexión de flujo de Gremlin (https://Neptune-DNS:8182/gremlin/stream) está en desuso, junto con su 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").

Parámetros
  • 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

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.

    • 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

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

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

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