Amazon DynamoDB
Guía para desarrolladores (Versión de API 2012-08-10)

Captura de la actividad de las tablas con Flujos de DynamoDB

Muchas aplicaciones pueden beneficiarse de la posibilidad de capturar los cambios en los elementos almacenados en una tabla de DynamoDB en el momento en que se producen. A continuación se muestran algunos ejemplos de casos de uso:

  • Una aplicación de una región de AWS modifica los datos de una tabla de DynamoDB. Una segunda aplicación de otra región lee estas modificaciones de datos y escribe los datos en otra tabla; al hacerlo, crea una réplica que permanece sincronizada con la tabla original.

  • Una popular aplicación para móviles modifica los datos de una tabla de DynamoDB a razón de miles de actualizaciones por segundo. Otra aplicación captura y almacena los datos sobre estas actualizaciones y ofrece métricas de uso de la aplicación para móviles prácticamente en tiempo real.

  • Un juego multijugador de ámbito mundial presenta una topología con varias versiones maestras que almacenan los datos en distintas regiones de AWS. Para permanecer sincronizada, cada versión maestra consume y reproduce los cambios que se producen en las regiones remotas.

  • Una aplicación envía automáticamente notificaciones a los dispositivos móviles de todos los amigos de un grupo tan pronto como uno de ellos carga una nueva imagen.

  • Un nuevo cliente agrega datos a una tabla de DynamoDB. Este evento invoca otra aplicación que envía un mensaje de correo electrónico de bienvenida al nuevo cliente.

Flujos de DynamoDB hace posibles soluciones como estas y muchas otras. Flujos de DynamoDB captura una secuencia en orden cronológico de las modificaciones de los elementos en una tabla de DynamoDB y almacena esta información en un registro durante un máximo de 24 horas. Las aplicaciones pueden obtener acceso a este registro y ver los elementos de datos tal y como se encontraban antes y después de la modificación, prácticamente en tiempo real.

El cifrado en reposo cifra los datos en las secuencias de DynamoDB. Para obtener más información, consulte Cifrado en reposo de DynamoDB.

Una secuencia de DynamoDB es un flujo ordenado de información sobre los cambios que se realizan en los elementos de una tabla de DynamoDB. Cuando se habilita una secuencia en una tabla, DynamoDB obtiene información sobre cada modificación de los elementos de datos de esa tabla.

Cada vez que una aplicación crea, actualiza o elimina elementos en la tabla, Flujos de DynamoDB escribe un registro de secuencia con los atributos de clave principal de los elementos modificados. Un registro de secuencia contiene información sobre una modificación de los datos de un solo elemento de una tabla de DynamoDB. Puede configurar la secuencia de tal forma que sus registros capturen información adicional; por ejemplo, las imágenes de "antes" y "después" de los elementos modificados.

Flujos de DynamoDB ayuda a asegurar lo siguiente:

  • Cada registro de secuencia aparece una única vez en la secuencia.

  • Para cada elemento que se modifica de una tabla de DynamoDB, los registros de secuencia aparecen en el mismo orden en que se han realizado las modificaciones del elemento.

Flujos de DynamoDB escribe los registros de secuencia prácticamente en tiempo real, para que se puedan crear aplicaciones que consuman estas secuencias y adopten medidas en función de su contenido.

Puntos de enlace para Flujos de DynamoDB

AWS mantiene puntos de enlace distintos para DynamoDB y Flujos de DynamoDB. Para usar las tablas y los índices de la base de datos, la aplicación tendrá que obtener acceso a un punto de enlace de DynamoDB. Para leer y procesar los registros de Flujos de DynamoDB, la aplicación tendrá que obtener acceso a un punto de enlace de Flujos de DynamoDB situado en la misma región.

La convención de nomenclatura de los puntos de enlace de Flujos de DynamoDB es streams.dynamodb.<region>.amazonaws.com. Por ejemplo, si usa el punto de enlace dynamodb.us-west-2.amazonaws.com para obtener acceso a DynamoDB, usaría el punto de enlace streams.dynamodb.us-west-2.amazonaws.com para obtener acceso a Flujos de DynamoDB.

nota

Para obtener una lista completa de las regiones y los puntos de enlace de DynamoDB y Flujos de DynamoDB, consulte Regiones y puntos de enlace en la AWS General Reference.

Los SDK de AWS proporcionan clientes independientes para DynamoDB y Flujos de DynamoDB. Según cuáles sean sus necesidades, la aplicación puede obtener acceso a un punto de enlace de DynamoDB, a un punto de enlace de Flujos de DynamoDB o a ambos al mismo tiempo. Para conectarse a ambos puntos de enlace, la aplicación tendrá que crear instancias de dos clientes: uno para DynamoDB y otro para Flujos de DynamoDB.

Habilitación de una secuencia

Puede habilitar una secuencia en una nueva tabla al crearla. También puede habilitar o deshabilitar una secuencia en una tabla existente, así como cambiar la configuración de una secuencia. Flujos de DynamoDB opera de forma asincrónica, por lo que el desempeño de una tabla no se vea afectado al habilitar una secuencia.

La forma más sencilla de administrar Flujos de DynamoDB es usar la Consola de administración de AWS.

  1. Inicie sesión en la Consola de administración de AWS y abra la consola de DynamoDB en https://console.aws.amazon.com/dynamodb/.

  2. En el panel de la consola de DynamoDB, elija Tables (Tablas).

  3. En la pestaña Overview (Información general), elija Manage Stream (Administrar secuencia).

  4. En la ventana Manage Stream (Administrar secuencia), elija la información que se escribirá en la secuencia cada vez que se modifiquen los datos de la tabla:

    • Keys only (Solo claves): solo los atributos de clave del elemento modificado.

    • New image (Nueva imagen): el elemento completo tal y como aparece después de modificarlo.

    • Old image (Antigua imagen): el elemento completo tal y como aparecía antes de modificarlo.

    • New and old images (Imágenes nueva y antigua): ambas imágenes del elemento, la nueva y la anterior.

    Cuando la configuración sea la que desea, elija Enable (Habilitar).

  5. (Opcional) Para deshabilitar una secuencia existente, elija Manage Stream (Administrar secuencia) y, a continuación, seleccione Disable (Deshabilitar).

También puede usar las operaciones de la API CreateTable o UpdateTable para habilitar o modificar una secuencia, respectivamente. El parámetro StreamSpecification determina cómo se configura la secuencia:

  • StreamEnabled: especifica si una secuencia está habilitada (true) o deshabilitada (false) para la tabla.

  • StreamViewType: especifica la información que se escribirá en la secuencia cada vez que se modifiquen los datos de la tabla:

    • KEYS_ONLY: solo los atributos de clave del elemento modificado.

    • NEW_IMAGE: el elemento completo tal y como aparece después de modificarlo.

    • OLD_IMAGE: el elemento completo tal y como aparecía antes de modificarlo.

    • NEW_AND_OLD_IMAGES: ambas imágenes del elemento, la nueva y la anterior.

Puede habilitar o deshabilitar una secuencia en cualquier momento. Sin embargo, tenga en cuenta que recibirá una excepción ResourceInUseException si intenta habilitar una secuencia en una tabla que ya tiene una. Recibirá una excepción ValidationException si intenta deshabilitar una secuencia en una tabla que no tiene ninguna.

Cuando se establece StreamEnabled en true, DynamoDB crea una nueva secuencia con un descriptor de secuencia único asignado a ella. Si deshabilita y vuelve a habilitar una secuencia en la tabla, se crea una secuencia nueva con un descriptor de secuencia distinto.

Cada secuencia se identifica de forma exclusiva mediante un nombre de recurso de Amazon (ARN). A continuación se muestra un ejemplo de ARN de una secuencia de una tabla de DynamoDB denominada TestTable.

arn:aws:dynamodb:us-west-2:111122223333:table/TestTable/stream/2015-05-11T21:21:33.291

Para determinar el último descriptor de secuencia de una tabla, se emite una solicitud DescribeTable de DynamoDB y se busca el elemento LatestStreamArn en la respuesta.

Lectura y procesamiento de secuencias

Para leer y procesar una secuencia, la aplicación tiene que conectarse a un punto de enlace de Flujos de DynamoDB y emitir solicitudes de API.

Una secuencia consta de registros de secuencia. Cada registro de secuencia representa una única modificación de datos de la tabla de DynamoDB a la que pertenece la secuencia. A cada registro de secuencia se le asigna un número de secuencia que refleja el orden en que el registro se ha publicado en la secuencia.

Los registros de secuencia se organizan en grupos, o fragmentos. Cada fragmento actúa como contenedor de varios registros de secuencia y contiene la información necesaria para obtener acceso a estos registros y recorrerlos en iteración. Los registros de secuencia de un fragmento se eliminan automáticamente transcurridas de 24 horas.

Los fragmentos son efímeros: se crean y eliminan automáticamente, según sea necesario. Además, cualquier fragmento se puede dividir en varios fragmentos nuevos; esto también sucede automáticamente. (Cabe destacar que un fragmento principal puede tener un solo fragmento secundario). Un fragmento se puede dividir en respuesta a niveles de actividad de escritura elevados en la tabla principal, para que las aplicaciones puedan procesar en paralelo los registros de varios fragmentos.

Si se deshabilita una secuencia, todos fragmentos que estén abiertos se cerrarán.

Como los fragmentos poseen un parentesco (principales y secundarios), las aplicaciones siempre deben procesar los fragmentos principales antes de procesar los secundarios. Esto ayuda a garantizar que los registros de secuencia se procesen también en el orden correcto. (Si se utiliza Flujos de DynamoDB Kinesis Adapter, esto se lleva a cabo de forma automatizada). La aplicación procesará los fragmentos y registros de secuencia en el orden correcto. También administrará automáticamente los fragmentos nuevos o vencidos, así como aquellos que se dividan mientras se ejecuta la aplicación. Para obtener más información, consulte Uso de Flujos de DynamoDB Kinesis Adapter para procesar registros de secuencia.)

En el siguiente diagrama se muestra la relación entre una secuencia, sus fragmentos y los registros de secuencia contenidos en los fragmentos.

nota

Si lleva a cabo una operación PutItem o UpdateItem que no modifica ningún dato de un elemento, Flujos de DynamoDB no escribe ningún registro de secuencia de esa operación.

Para obtener acceso a una secuencia y procesar los registros que contiene, proceda como sigue:

  • Determine el ARN único de la secuencia a la que desea obtener acceso.

  • Determine qué fragmentos de la secuencia contienen los registros de secuencia que le interesan.

  • Obtenga acceso a los fragmentos y recupere los registros de secuencia que desee.

nota

Nunca debe haber más de dos procesos leyendo el mismo fragmento de secuencia a la vez. Usar más de dos procesos de lectura por fragmento puede provocar que se aplique la limitación controlada.

La API de Flujos de DynamoDB ofrece las siguientes acciones para usarlas en los programas de aplicación:

  • ListStreams: devuelve una lista de descriptores de secuencia de la cuenta y el punto de enlace actuales. Si lo desea, puede solicitar únicamente los descriptores de secuencia de un nombre de tabla concreto.

  • DescribeStream: devuelve información detallada sobre una secuencia determinada. El resultado incluye una lista de fragmentos asociados a la secuencia, con sus identificadores.

  • GetShardIterator: devuelve un iterador de fragmentos que describe una ubicación en el fragmento. Puede solicitar que el iterador proporcione acceso al punto más antiguo, al punto más reciente o a un punto concreto de la secuencia.

  • GetRecords: devuelve los registros de secuencia de un fragmento determinado. Debe proporcionar el iterador de fragmentos devuelto por una solicitud GetShardIterator.

Para obtener descripciones completas de estas operaciones de la API, así como ejemplos de solicitudes y respuestas, consulte Referencia de la API de Amazon DynamoDB Streams.

Límite de retención de datos en Flujos de DynamoDB

Todos los datos de Flujos de DynamoDB están sujetos a una vida útil de 24 horas. Puede recuperar y analizar las últimas 24 horas de actividad de cada tabla. Sin embargo, los datos de más de 24 horas se pueden recortar (eliminar) en cualquier momento.

Si deshabilita una secuencia en una tabla, los datos de esa secuencia continuarán disponibles para leerlos durante 24 horas. Transcurrido ese tiempo, los datos vencen y los registros de secuencia se eliminan automáticamente. No existe ningún mecanismo para eliminar manualmente las secuencias. Tiene que esperar hasta que se alcance el límite de retención (24 horas) para que se eliminen los registros de secuencia.