En esta oportunidad mencionaremos información general sobre los componentes del servicio de Amazon DynamoDB y las interacciones entre ellos, con lo cual te invitamos a leer la siguiente introducción.
Luego puedes seguir con: Creación de tablas y carga de ejemplos de datos, allí se explica paso por paso lo referido a la carga de datos, al proceso de creación de tablas de ejemplo y como hacer algunas operaciones básicas con la misma base de datos.
Deseas ver y entender un poco mas sobre los lenguajes con código de muestra con un detalle más especifico?, entonces te recomendamos leer: Introducción a DynamoDB.
Temas
- Componentes básicos de DynamoDB
- API de DynamoDB
- Reglas de nomenclatura y tipos de datos
- Consistencia de lectura
- Capacidad de desempeño para lecturas y escrituras
- Partitions y distribución de datos
Entonces empecemos! los componentes básicos de Amazon DynamoDB son los siguientes:
Amazon DynamoDB: Tablas, elementos y atributos
Tablas: Amazon DynamoDB almacena datos en tablas de la misma forma que hacen otros sistemas similares de administración de bases de datos. Como sabemos, la tabla es una colección de datos.
Miremos un ejemplo: consultamos la tabla llamada People, la usaremos para guardar la información correspondiente al contacto personal de familiares, amigos u otras personas de nuestro interés. De igual manera podríamos utilizar la tabla Cars para guardar los datos referidos a los transportes o vehículos que conducen las personas
Elementos: Tenemos varios elementos contenidos en una tabla. Pero, que es un elemento? es un grupo de atributos que puede reconocerse de manera exclusiva entre los demás elementos. Entonces en la tabla People, un elementos representa a una persona. En la tabla Cars, a un vehículo.
Los elementos de Amazon DynamoDB son similares en varios aspectos a los registros, las filas de otros sistemas de bases de datos. En Amazon DynamoDB no figura ningún límite referido al número de elementos que pueden guardarse en una tabla.
Atributos: Cada elemento esta conformado de uno o varios atributos.
El atributo es un componente fundamental de los datos y no nos resulta necesario dividirlo más. Un ejemplo: un elemento en la tabla People tiene los siguientes atributos FirstName, LastName, PersonID, etc.
La tabla Department, podríamos tener un elemento con atributos tales como DepartmentID, Name, Manager, etc.
En Amazon DynamoDB vemos entonces que los atributos son similares en varios aspectos a campos o columnas en de otras bases de datos.
En la imagen, una tabla llamada People que tiene ejemplos de elementos y atributos:
Tenga en cuenta lo siguiente en relación con la tabla People:
El elemento de la tabla contiene un identificador que es único, llamado clave principal, esto lo distingue entre los demás elementos. Para la tabla People vemos que la clave principal consta de un atributo (PersonID).
Pero por un momento dejemos de lado la clave principal, miremos que la tabla People no posee esquema. Esto quiere decir que no es necesario establecer de antemano atributos ni sus tipos de datos. Un elemento puede poseer diversos atributos.
Los atributos, en mayor parte, son escalares, significa que únicamente poseen un valor. Cadenas y números son ejemplos comunes de escalares.
Determinados elementos contienen un atributo anidado (Address). Amazon DynamoDB permite atributos anidados hasta un tope máximo de 32 niveles.
Se muestra otro ejemplo en este caso de la tabla Music, la misma se podría usar para llevar registro de una colección de música:
.
Tenga en cuenta lo siguiente en relación con la tabla Music:
La tabla Music tiene la clave principal y posee dos atributos (Artist y SongTitle). Por lo tanto cada uno de los elementos de la tabla debe poseer estos dos atributos. Es decir, la combinación de SongTitle y Artist diferencia a cada elemento en tabla de todo el conjunto.
Hagamos nuevamente a un lado el tema de la clave principal, vemos que Music no posee esquema. Lo cual quiere decir que no es necesario definir con anterioridad ni atributos ni sus tipos de datos. Entonces cada elemento es capaz de tener propios atributos diferentes.
Observemos que uno de los elementos posee un atributo anidado (PromotionInfo), que a su vez posee otros atributos anidados. Amazon DynamoDB permite atributos anidados de un máximo de 32 niveles de profundidad.
Esperamos que esta breve pero precisa introducción a tablas haya sido útil para ti, si deseas seguir leyendo sobre las tablas de DynamoDB te recomendamos leer: Uso de tablas en Amazon DynamoDB.
Clave principal
Cuando creamos una tabla, asignamos el nombre y también tenemos que especificar su clave principal. Esta clave principal reconoce de manera única cada elemento en tabla, de esta forma no hay dos elementos con una clave igual.
Amazon DynamoDB permite dos tipos diferentes de clave principal:
Clave de partición: una clave simple que consiste de solo un atributo llamado clave de partición.
Amazon DynamoDB usa el valor de clave de partición como dato de entrada a una función hash interna. El resultado de la función resuelve la partición (almacenamiento físico interno) donde se guardará el elemento.
En una determinada tabla que contiene solo una clave de partición, no es posible que haya dos elementos que contengan el mismo valor en lo que se refiere a clave de partición.
La tabla People es un claro ejemplo de tabla con una clave principal simple (PersonID). Puede tener acceso a cualquiera de los elementos en tabla People de forma inmediata entregando el valor de PersonId de dicho elemento.
Clave de partición y clave de ordenación: este tipo de clave se define como clave principal compuesta y se constituye con dos atributos. El primero de estos atributos es la clave de partición, el segundo es la denominada clave de ordenación.
Todos los elementos con igual clave de partición se guardan en posiciones contiguas, ordenados según valor de clave de ordenación…
Si una tabla contiene clave de partición y ordenación, es probable que dos elementos poseean el mismo valor en cuanto a clave de partición. Igualmente, los dos elementos deben contener valores de clave de ordenación diferentes.
La tabla Music es un claro ejemplo de tabla con clave principal compuesta (Artist y SongTitle). Es posible tener acceso a cualquiera de los elementos de la tabla Music de manera inmediata proporcionando los valores de Artist y SongTitle de dicho elemento.
Una clave principal compuesta brinda mayor flexibilidad al momento de consultar datos. Por ejemplo, si brinda el valor de Artist, Amazon DynamoDB recupera por completo todas las canciones del intérprete. Hasta podría brindar un valor de Artist e intervalo de valores de SongTitle para obtener tan solo un subconjunto de canciones de un determinado intérprete.
Nota
La clave de partición de un elemento se reconoce también como atributo hash. Hash hace alusión al uso de una función hash interna en Amazon DynamoDB para distribuir los elementos de datos de manera uniforme entre las particiones, según los valores de clave de partición.
La clave de ordenación de un elemento también se define como atributo de rango. Atributo de rango se refiere al hecho de que Amazon DynamoDB guarda en ubicaciones físicamente inmediatas todos los elementos que poseen idéntica clave de partición, ordenados según sea su valor de clave de ordenación.
Cada atributo de clave principal sólo puede tener un único valor, o sea, debe ser escalar. Los únicos tipos de datos que están habilitados para los atributos de clave principal son String, Number y Binary. Los demás atributos que no tienen clave, no tienen restricciones de esta naturaleza.
Índices secundarios
Es posible generar uno o varios índices secundarios en tabla. Un índice secundario permite consultar datos en la tabla utilizando una clave alternativa, además de realizar consultas basadas en la clave principal.
Amazon DynamoDB no requiere la utilización de índices; de todas formas, estos brindan a las aplicaciones gran flexibilidad al momento de consultar los datos. Posterior a crear un índice secundario en una tabla, logrará leer los datos en el índice prácticamente de igual manera que en la tabla.
Amazon DynamoDB admite dos tipos de índices:
Global secondary index: índice con clave de partición y clave de ordenación, pueden diferenciarse de las claves de la tabla.
Índice secundario local: índice que posee igual clave de partición que la tabla, pero una clave de ordenación diferente. Es capaz de definir hasta 5 índices secundarios globales y también 5 secundarios locales por cada una de las tablas.
En la tabla Music, es posible la consulta de los elementos de datos por Artist (clave de partición) o por Artist y SongTitle (claves de partición y ordenación).
¿Qué sucedería si también se desea consultar datos por género musical (Genre) y título de álbum (AlbumTitle)?
En ese caso puede crear un índice basado en Genre y AlbumTitle y luego consultarlo de la misma forma que se consultaría la tabla Music. En la imagen, se muestra la tabla Music, con un nuevo índice llamado GenreAlbumTitle. En el índice, Genre es clave de partición y AlbumTitle es de ordenación.
Tabla Music de ejemplo, con un nuevo índice llamado enreAlbumTitle. 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 corresponde a una tabla, que se define como la tabla base del índice. En el ejemplo, Music es la tabla base del índice GenreAlbumTitle.
Amazon DynamoDB mantiene los índices de manera automática. Al momento de agregar, actualizar o eliminar un elemento de la tabla base; Amazon DynamoDB agrega, actualiza o elimina el elemento que corresponde en los índices que se refieren a dicha tabla.
Cuando se crea un índice, se establece qué atributos de la tabla base se copian o proyectan en el índice. Amazon DynamoDB proyecta como mínimo en el índice los atributos de clave de la tabla base.
Esto es lo que sucede con el índice GenreAlbumTitle que de manera única se proyectan atributos de clave de tabla Music.
Puede consultar el índice GenreAlbumTitle para obtener todos los álbumes de un determinado género musical (por ejemplo, todos los álbumes de música de Country).
A su vez puede consultar el índice para hallar todos los álbumes de un determinado género musical que poseean un título de álbum específico (un ejemplo, todos los álbumes de música Rock que en su título comience con la letra H).
El tema de indices secundario mejora y maximiza el acceso a los datos, si deseas leer mas sobre los indices te proponemos el siguiente post: Uso de índices secundarios para mejorar el acceso a los datos.
Flujos de Amazon DynamoDB
Flujos de Amazon es una de las características opcionales, captura los diversos eventos de modificación de datos que se realizan en tablas de Amazon DynamoDB.
Los datos de los eventos se visualizan en una secuencia de tiempo real prácticamente y en el orden que se han generado.
Cada evento se muestra mediante registro de secuencia. Por lo tanto si habilita una secuencia en tabla, Flujos de Amazon escribe un registro de secuencia cada vez que se generen los siguientes eventos:
- Agrega nuevo elemento a la tabla, la secuencia toma o captura una imagen del elemento de manera completa, incluyendo todos sus atributos.
- Un elemento es actualizado, la secuencia capturada imágenes de “antes” y “después” de los atributos del elemento que fueron modificados.
- Elimina elemento en tabla, la secuencia captura una determinada imagen del elemento completo antes de eliminarlo.
Cada uno de los registros de secuencia tienen también nombre de tabla, la marca de tiempo del evento y demás metadatos. Los registros de secuencia poseen vida útil de 24 horas; después se borran automáticamente de la secuencia.
Puede utilizar Flujos de Amazon DynamoDB conjuntamente con AWS Lambda para crear un disparador
Es decir, un código que se ejecute de manera automática cada vez que figure un evento de interés en una secuencia.
Por ejemplo, tomando la tabla Customers que tiene información de clientes de una empresa.
Supongamos que queremos enviar un mensaje de correo electrónico para dar una bienvenida a cada uno de los nuevos clientes. Podría habilitar una secuencia en esa tabla y posterior a ello asociar la secuencia con una función Lambda.
La función Lambda se ejecutaría cada vez que figurase un nuevo registro en la secuencia, pero solamente procesaría los nuevos elementos sumados a la tabla Customers.
Para cualquier elemento que tuviera el atributo EmailAddress, la función Lambda sería capaza de invocar Amazon Simple Email Service (Amazon SES) para que de esta forma enviase un mensaje de correo electrónico a esa dirección.
Nota
En el ejemplo fijemonos que el último cliente, Craig Roe no recibirá un mensaje de correo electrónico, porque el mismo no tiene el atributo EmailAddress.
Además de los disparadores, Flujos de Amazon DynamoDB permite utilizar soluciones sumamente performantes, como lo son la replicación de datos en el seno de regiones de AWS y entre ellas, vistas materializadas de datos en tablas de Amazon DynamoDB o análisis de datos usando vistas materializadas de Kinesis, entre otras.
Para obtener más información sobre la captura de datos con Flujos lo invitamos a leer el post: Captura de la actividad de las tablas con Flujos de Amazon DynamoDB.
Esperamos que este post haya sido de tu interés! esperamos tus comentarios para continuar informando sobre Amazon DynamoDB y las nuevas tecnologias referidas al mundo de Big Data, por favor no olvides seguirnos en nuestras redes sociales, te enviamos un cordial saludo!