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

Componentes básicos de DynamoDB

En DynamoDB se trabaja principalmente con tablas, elementos y atributos. Una tabla es una colección de elementos y cada elemento es una colección de atributos. DynamoDB utiliza claves principales para identificar de forma exclusiva cada uno de los elementos de la tabla e índices secundarios para proporcionar mayor flexibilidad a la hora de realizar consultas. Puede utilizar Flujos de DynamoDB para capturar los eventos de modificación de datos en las tablas de DynamoDB.

En DynamoDB se aplican algunos límites. Para obtener más información, consulte Límites en DynamoDB.

Tablas, elementos y atributos

A continuación, se indican los componentes básicos de DynamoDB:

  • Tablas – Al igual que otros sistemas de administración de bases de datos, DynamoDB almacena datos en tablas. Una tabla es una colección de datos. Por ejemplo, consulte la tabla de ejemplo denominada People, que puede utilizar para almacenar información de contacto personal sobre amigos, familiares u otras personas de interés. También podría utilizar una tabla Cars para almacenar información sobre los vehículos que conducen las personas.

  • Elementos – Cada tabla contiene cero o más elementos. Un elemento es un grupo de atributos que puede identificarse de forma exclusiva entre todos los demás elementos. En una tabla People, cada elemento representa a una persona. En una tabla Cars, cada elemento representa un vehículo. Los elementos de DynamoDB son similares en muchos aspectos a las filas, los registros o las tuplas de otros sistemas de bases de datos. En DynamoDB, no existe ningún límite respecto al número de elementos que pueden almacenarse en una tabla.

  • Atributos – Cada elemento se compone de uno o varios atributos. Un atributo es un componente fundamental de los datos, que no es preciso dividir más. Por ejemplo, un elemento de una tabla People contiene los atributos PersonID, LastName, FirstName, etc. En una tabla Department, un elemento podría tener atributos tales como DepartmentID, Name,Manager, etc. En DynamoDB, los atributos se parecen en muchos aspectos a los campos o columnas en otros sistemas de bases de datos.

En el siguiente diagrama se muestra una tabla denominada People que contiene algunos ejemplos de elementos y atributos.

Tenga en cuenta lo siguiente en relación con la tabla People:

  • Cada elemento de la tabla tiene un identificador único, o clave principal, que lo distingue de todos los demás. En la tabla People, la clave principal consta de un atributo (PersonID).

  • Dejando a un lado la clave principal, la tabla People no tiene esquema. Esto significa que no es preciso definir de antemano los atributos ni sus tipos de datos. Cada elemento puede tener sus propios atributos diferentes.

  • La mayoría de los atributos son escalares, lo que significa que solo pueden tener un valor. Las cadenas y los números son ejemplos comunes de escalares.

  • Algunos de los elementos tienen un atributo anidado (Address). DynamoDB admite atributos anidados hasta 32 niveles de profundidad.

A continuación se muestra otro ejemplo de tabla denominada Music que podría utilizar para llevar un registro de una colección de música.

Tenga en cuenta lo siguiente en relación con la tabla Music:

  • La clave principal de Music consta de dos atributos (Artist y SongTitle). Cada elemento de la tabla debe tener estos dos atributos. La combinación de Artist y SongTitle distingue a cada elemento de la tabla de todos los demás.

  • Dejando a un lado la clave principal, la tabla Music no tiene esquema. Esto significa que no es preciso definir de antemano los atributos ni sus tipos de datos. Cada elemento puede tener sus propios atributos diferentes.

  • Uno de los elementos tiene un atributo anidado (PromotionInfo), que contiene otros atributos anidados. DynamoDB admite atributos anidados hasta 32 niveles de profundidad.

Para obtener más información, consulte Uso de tablas en DynamoDB.

Clave principal

Al crear una tabla, además de asignarle un nombre, debe especificar su clave principal. La clave principal identifica de forma única a cada elemento de la tabla, de manera que no puede haber dos elementos con la misma clave.

DynamoDB admite dos tipos distintos de clave principal:

  • Clave de partición – Una clave principal simple que consta de un solo atributo denominado clave de partición.

    DynamoDB utiliza el valor de clave de partición como información de entrada a una función hash interna. El resultado de la función hash determina la partición (almacenamiento físico interno de DynamoDB) donde se almacenará el elemento.

    En una tabla que solo tiene una clave de partición, no puede haber dos elementos que tengan el mismo valor de clave de partición.

    La tabla People descrita en Tablas, elementos y atributos es un ejemplo de una tabla con una clave principal simple (PersonID). Puede obtener acceso a cualquier elemento de la tabla People directamente al proporcionar el valor de PersonId de dicho elemento.

  • Clave de partición y clave de ordenación – Este tipo de clave se denomina clave principal compuesta y consta de dos atributos. El primer atributo es la clave de partición y el segundo, la clave de ordenación.

    DynamoDB utiliza el valor de clave de partición como información de entrada a una función hash interna. El resultado de la función hash determina la partición (almacenamiento físico interno de DynamoDB) donde se almacenará el elemento. Todos los elementos con el mismo valor de clave de partición se almacenan en posiciones contiguas, ordenados según el valor de la clave de ordenación.

    En una tabla que tenga una clave de partición y una clave de ordenación, es posible que dos elementos tengan el mismo valor de clave de partición. Sin embargo, esos dos elementos deben tener valores de clave de ordenación distintos.

    La tabla Music descrita en Tablas, elementos y atributos es un ejemplo de una tabla con una clave principal compuesta (Artist y SongTitle). Puede obtener acceso a cualquier elemento de la tabla Music directamente al proporcionar los valores de Artist y SongTitle de dicho elemento.

    Una clave principal compuesta ofrece más flexibilidad a la hora de consultar datos. Por ejemplo, si proporciona el valor de Artist, DynamoDB recupera todas las canciones de ese intérprete. Para recuperar solo un subconjunto de canciones de un intérprete determinado, proporcione un valor de Artist y un intervalo de valores de SongTitle.

nota

La clave de partición de un elemento también se denomina atributo hash. El término atributo hash alude al uso de una función hash interna en DynamoDB para distribuir los elementos de datos de manera uniforme entre las particiones, según sus valores de clave de partición.

La clave de ordenación de un elemento también se denomina atributo de rango. El término atributo de rango alude al hecho de que DynamoDB almacena en ubicaciones físicamente contiguas todos los elementos que tienen la misma clave de partición, ordenados según el valor de la clave de ordenación.

Cada atributo de clave principal debe ser escalar (es decir, solo puede contener un único valor). Los únicos tipos de datos que se permiten para los atributos de clave principal son String, Number y Binary. A los demás atributos sin clave no se les aplican restricciones de esta índole.

Índices secundarios

Puede crear uno o varios índices secundarios en una tabla. Un índice secundario le permite consultar los datos de la tabla usando una clave alternativa, además de realizar consultas basadas en la clave principal. DynamoDB no requiere que se usen índices; sin embargo, estos ofrecen a las aplicaciones mayor flexibilidad a la hora de consultar los datos. Después de crear un índice secundario en una tabla, podrá leer los datos en el índice prácticamente de la misma forma que en la tabla.

DynamoDB admite dos tipos de índices:

  • Global secondary index – Índice con una clave de partición y una clave de ordenación que puede diferir de las claves de la tabla.

  • Índice secundario local – Índice que tiene la misma clave de partición que la tabla, pero una clave de ordenación distinta.

Cada tabla de DynamoDB tiene un límite de 20 índices secundarios globales (límite predeterminado) y 5 índices secundarios locales por tabla.

En el ejemplo de la tabla Music mostrado anteriormente, puede consultar los elementos de datos por Artist (clave de partición) o por Artist y SongTitle (claves de partición y ordenación). ¿Qué sucede si también desea consultar los datos por género musical (Genre) y título de álbum (AlbumTitle)? Para ello, puede crear un índice basado en Genre y AlbumTitle y, a continuación, consultarlo prácticamente de la misma forma que se consultaría la tabla Music.

El siguiente diagrama muestra la tabla Music de ejemplo, con un nuevo índice llamado GenreAlbumTitle. En el índice, Genre es la clave de partición y AlbumTitle es la clave de ordenación.

Tenga en cuenta lo siguiente en relación con el índice GenreAlbumTitle:

  • Cada índice pertenece a una tabla, que se denomina la tabla base del índice. En el ejemplo anterior, Music es la tabla base del índice GenreAlbumTitle.

  • DynamoDB mantiene los índices automáticamente. Al agregar, actualizar o eliminar un elemento de la tabla base, DynamoDB agrega, actualiza o elimina el elemento correspondiente en los índices que pertenecen a dicha tabla.

  • Al crear un índice, se especifica qué atributos de la tabla base se copiarán, o proyectarán, en el índice. Como mínimo, DynamoDB proyecta en el índice los atributos de clave de la tabla base. Esto es lo que sucede con el índice GenreAlbumTitle, en el que únicamente se proyectan los atributos de clave de la tabla Music.

Puede consultar el índice GenreAlbumTitle para encontrar todos los álbumes de un género musical determinado (por ejemplo, todos los álbumes de música Rock). También puede consultar el índice para encontrar todos los álbumes de un determinado género musical que tengan un título de álbum específico (por ejemplo, todos los álbumes de música Country cuyo título comience por la letra H).

Para obtener más información, consulte Uso de índices secundarios para mejorar el acceso a los datos.

Flujos de DynamoDB

Flujos de DynamoDB es una característica opcional que captura los eventos de modificación de datos que se producen en las tablas de DynamoDB. Los datos de estos eventos aparecen en la secuencia prácticamente en tiempo real y en el orden en que se han producido.

Cada evento se representa mediante un registro de secuencia. Si habilita una secuencia en una tabla, Flujos de DynamoDB escribe un registro de secuencia cada vez que se produzcan los siguientes eventos:

  • Se agrega un nuevo elemento a la tabla: la secuencia captura una imagen del elemento completo, incluidos todos sus atributos.

  • Se actualiza un elemento: la secuencia captura las imágenes de "antes" y "después" de los atributos del elemento que se han modificado.

  • Se elimina un elemento de la tabla: la secuencia captura una imagen del elemento completo antes de eliminarlo.

Cada registro de secuencia también contiene el nombre de la tabla, la marca temporal del evento y otros metadatos. Los registros de secuencia tienen una vida útil de 24 horas; después, se eliminan automáticamente de la secuencia.

Puede utilizar Flujos de DynamoDB conjuntamente con AWS Lambda para crear un disparador —es decir, un código que se ejecute automáticamente cada vez que aparezca un evento de interés en una secuencia. Por ejemplo, tomemos una tabla Customers que contiene la información de clientes de una compañía. Supongamos que desea enviar un mensaje de correo electrónico de bienvenida a cada nuevo cliente. Podría habilitar una secuencia en esa tabla y, a continuación, asociar la secuencia con una función Lambda. La función Lambda se ejecutaría cada vez que apareciese un nuevo registro en la secuencia, pero solamente procesaría los nuevos elementos agregados a la tabla Customers. Para cualquier elemento que tuviera el atributo EmailAddress, la función Lambda podría invocar Amazon Simple Email Service (Amazon SES) para que enviase un mensaje de correo electrónico a esa dirección.

nota

En este ejemplo, observe que el último cliente, Craig Roe, no recibirá un mensaje de correo electrónico, porque no tiene el atributo EmailAddress.

Además de los disparadores, Flujos de DynamoDB permite utilizar soluciones sumamente eficientes, tales como replicación de datos en el seno de regiones de AWS y entre ellas, vistas materializadas de datos en las tablas de DynamoDB o análisis de datos mediante vistas materializadas de Kinesis, entre otras.

Para obtener más información, consulte Captura de la actividad de las tablas con Flujos de DynamoDB.