Amazon DynamoDB es un servicio de base de datos NoSQL administrado proporcionado por Amazon Web Services (AWS). Admite estructuras de datos clave-valor y de documentos , y está diseñado para manejar una amplia gama de aplicaciones que requieren escalabilidad y rendimiento. [ 2 ]
Historia
Werner Vogels , CTO de Amazon.com, proporcionó una motivación para el proyecto en su anuncio de 2012. [ 3 ] Amazon comenzó como una red descentralizada de servicios. Originalmente, los servicios tenían acceso directo a las bases de datos de los demás. Cuando esto se convirtió en un cuello de botella en las operaciones de ingeniería, los servicios se alejaron de este patrón de acceso directo en favor de las API de cara al público. Aun así, los sistemas de gestión de bases de datos relacionales de terceros tuvieron dificultades para manejar la base de clientes de Amazon. Esto culminó durante la temporada navideña de 2004 [ 4 ] [ 5 ] , cuando varias tecnologías fallaron bajo un alto tráfico.
Las bases de datos tradicionales suelen dividir los datos en fragmentos más pequeños para ahorrar espacio, pero combinar esos fragmentos durante las búsquedas puede ralentizar las consultas. Muchos de los servicios de Amazon requerían principalmente lecturas de clave primaria en sus datos, y dado que la velocidad era una prioridad máxima, combinar estos fragmentos resultaba extremadamente exigente. [ 6 ]
Conforme con la eficiencia de almacenamiento comprometida, la respuesta de Amazon fue Dynamo : un almacén de clave-valor de alta disponibilidad diseñado para uso interno. [ 3 ] Dynamo, al parecer, era todo lo que sus ingenieros necesitaban, pero su adopción fue lenta. Los desarrolladores de Amazon optaron por patrones de diseño "simplemente funcionan" con S3 y SimpleDB. Si bien estos sistemas tenían fallas de diseño notables, no requerían la sobrecarga de aprovisionar hardware, escalar y reparticionar datos. La siguiente iteración de la tecnología NoSQL de Amazon , DynamoDB, automatizó estas operaciones de administración de bases de datos.
Descripción general

DynamoDB organiza los datos en tablas, similares a las hojas de cálculo. Cada tabla contiene elementos (filas), y cada elemento está compuesto por atributos (columnas). Cada elemento tiene un identificador único llamado clave primaria, que ayuda a localizarlo dentro de la tabla.
Tablas de DynamoDB
Una tabla de DynamoDB es una agrupación lógica de elementos que representan los datos almacenados en ella. Dada la naturaleza NoSQL de DynamoDB, las tablas no requieren que todos sus elementos se ajusten a un esquema predefinido. [ 7 ]
Elementos de DynamoDB
En DynamoDB, un elemento es un conjunto de atributos que se pueden identificar de forma única en una tabla. Un atributo es una entidad de datos atómica que, a su vez, es un par clave-valor. La clave siempre es de tipo cadena, mientras que el valor puede ser de varios tipos de datos.
Un elemento se identifica de forma única en una tabla mediante un subconjunto de sus atributos denominados claves. [ 7 ]
Claves en DynamoDB
Una clave primaria es un conjunto de atributos que identifica de forma única los elementos de una tabla de DynamoDB. La creación de una tabla de DynamoDB requiere la definición de una clave primaria. Cada elemento de una tabla de DynamoDB debe tener todos los atributos que conforman la clave primaria, y no puede haber dos elementos con la misma clave primaria. Las claves primarias en DynamoDB pueden constar de uno o dos atributos.
Cuando una clave primaria se compone de un solo atributo, se denomina clave de partición. Las claves de partición determinan la ubicación física del elemento asociado. En este caso, dos elementos de una tabla no pueden tener la misma clave de partición.
Cuando una clave primaria se compone de dos atributos, el primero se denomina "clave de partición" y el segundo, "clave de ordenación". Como antes, la clave de partición determina la ubicación física de los datos, mientras que la clave de ordenación determina la posición lógica relativa del registro del elemento asociado dentro de esa ubicación física. En este caso, dos elementos de una tabla pueden tener la misma clave de partición, pero no puede haber dos elementos de una partición con la misma clave de ordenación. En otras palabras, una combinación dada de clave de partición y clave de ordenación garantiza que, como máximo, un elemento estará asociado a ella en una tabla de DynamoDB. [ 7 ]
Tipos de datos de DynamoDB
DynamoDB admite tipos de datos numéricos, de cadena, booleanos, de documento y de conjunto. [ 8 ]
Índices de DynamoDB
La clave primaria de una tabla es el índice predeterminado o primario de una tabla de DynamoDB.
Además, una tabla de DynamoDB puede tener índices secundarios. Un índice secundario se define en un atributo diferente de la clave de partición o la clave de ordenación que utiliza el índice principal.
Cuando un índice secundario tiene la misma clave de partición que el índice primario, pero una clave de ordenación diferente, se le denomina índice secundario local.
Cuando el índice primario y el índice secundario tienen claves de partición diferentes, el índice secundario se conoce como índice secundario global. [ 7 ]
Patrones arquitectónicos en el modelado de datos de DynamoDB
Los patrones de modelado de datos de DynamoDB son enfoques arquitectónicos utilizados en Amazon DynamoDB, un servicio de base de datos NoSQL diseñado para sistemas distribuidos. Estos patrones abordan diversos desafíos de organización de datos e incluyen el "Diseño de tabla única", que consolida datos relacionados respetando el límite de tamaño de elemento de 400 KB de DynamoDB; el "Diseño de tablas múltiples", que separa los datos en tablas distintas según los patrones de acceso y las diferencias del modelo de datos; y el Diseño híbrido, que combina ambos enfoques para equilibrar la flexibilidad y la eficiencia. [ 9 ] [ 10 ] [ 11 ]
Otros patrones descritos en la documentación de AWS incluyen "Event Sourcing", donde los cambios de datos se almacenan como eventos inmutables, lo que permite la reconstrucción del estado histórico; "Materialized Views", que simplifican las consultas analíticas mediante agregaciones precalculadas, a menudo implementadas a través de DynamoDB Streams, procesamiento a nivel de aplicación o actualizaciones periódicas por lotes mediante funciones Lambda . Así como "Time-Series Design", optimizado para cargas de trabajo como el registro y las métricas, que normalmente utiliza una clave de partición para la identificación de entidades y una clave de ordenación que representa marcas de tiempo para consultar de forma eficiente conjuntos de datos basados en el tiempo. [ 12 ] [ 13 ] [ 14 ]
Cada patrón aborda requisitos técnicos específicos. El "Diseño de tabla única" puede optimizar la eficiencia de las consultas al ubicar conjuntamente datos relacionados bajo la misma clave de partición para reducir la latencia de acceso. El "Diseño de tablas múltiples" permite la separación de responsabilidades al aislar los datos en tablas específicas para cada propósito con patrones de acceso distintos. El "Event Sourcing" conserva un registro histórico de los cambios de estado, a menudo implementado con almacenamiento de datos inmutable. Las "Vistas materializadas" simplifican las consultas analíticas complejas mediante estrategias de preagregación adaptadas a los patrones de acceso. El "Diseño de series temporales" utiliza estrategias de particionamiento y ordenación para almacenar y consultar de manera eficiente grandes volúmenes de datos temporales. [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ]
Limitaciones de rendimiento de las afirmaciones de latencia de DynamoDB
La afirmación de Amazon DynamoDB de una latencia de un solo dígito en milisegundos se aplica principalmente a operaciones simples como GetItemy PutItem, que recuperan o modifican elementos individuales utilizando sus claves primarias. Esto refleja la latencia promedio en condiciones ideales, como una distribución uniforme de particiones y un aprovisionamiento de rendimiento suficiente, y no tiene en cuenta la sobrecarga de transporte incurrida durante la comunicación con el punto final de DynamoDB. Las operaciones más complejas, como Querycon filtros, Scan, o aquellas que involucran grandes conjuntos de datos, pueden experimentar una mayor latencia debido a los requisitos adicionales de computación y transferencia de datos. [ 15 ] [ 16 ]
Cierre
Aunque DynamoDB no admite bloqueos de forma nativa, existen diferentes mecanismos. El bloqueo optimista puede usar un número de versión para detectar conflictos que ocurren después de las actualizaciones, en lugar de prevenirlos de antemano. El bloqueo pesimista , por el contrario, puede implicar actualizaciones condicionales con atributos como lockTimey lockedBy. Cuando se combinan con el Tiempo de Vida (TTL), estos atributos permiten la eliminación automatizada de bloqueos caducados, lo que potencialmente mejora la gestión de la concurrencia en arquitecturas basadas en eventos. [ 15 ] [ 17 ] [ 18 ] [ 19 ]
Arquitectura del sistema

Estructuras de datos
DynamoDB utiliza funciones hash y árboles B para gestionar los datos. Al ingresar, los datos se distribuyen primero en diferentes particiones mediante el cálculo de la función hash en la clave de partición. Cada partición puede almacenar hasta 10 GB de datos y manejar de forma predeterminada 1000 unidades de capacidad de escritura (WCU) y 3000 unidades de capacidad de lectura (RCU). [ 20 ] Una RCU representa una lectura fuertemente consistente por segundo o dos lecturas eventualmente consistentes por segundo para elementos de hasta 4 KB de tamaño. [ 21 ] Una WCU representa una escritura por segundo para un elemento de hasta 1 KB de tamaño.
Para evitar la pérdida de datos, DynamoDB cuenta con un sistema de copia de seguridad de dos niveles que combina replicación y almacenamiento a largo plazo. [ 22 ] Cada partición consta de tres nodos, cada uno de los cuales contiene una copia de los datos de dicha partición. Cada nodo también contiene dos estructuras de datos: un árbol B utilizado para localizar elementos y un registro de replicación que registra todos los cambios realizados en el nodo. DynamoDB toma instantáneas periódicas de estas dos estructuras de datos y las almacena durante un mes en S3 para que los ingenieros puedan realizar restauraciones puntuales de sus bases de datos.
Dentro de cada partición, uno de los tres nodos se designa como el "nodo líder". Todas las operaciones de escritura pasan primero por el nodo líder antes de propagarse, lo que garantiza la consistencia de las escrituras en DynamoDB. Para mantener su estado, el líder envía una señal de actividad a cada uno de los demás nodos cada 1,5 segundos. Si un nodo deja de recibir señales de actividad, puede iniciar una nueva elección de líder. DynamoDB utiliza el algoritmo Paxos para la elección de líderes.
Los ingenieros de Amazon inicialmente evitaron DynamoDB debido a los costos generales de ingeniería, como el aprovisionamiento y la administración de particiones y nodos. [ 6 ] En respuesta, el equipo de DynamoDB creó un servicio llamado AutoAdmin para administrar una base de datos. [ 22 ] AutoAdmin reemplaza un nodo cuando deja de responder copiando datos de otro nodo. Cuando una partición supera cualquiera de sus tres umbrales (RCU, WCU o 10 GB), AutoAdmin agrega automáticamente particiones adicionales para segmentar aún más los datos. [ 20 ]
Al igual que los sistemas de indexación en el modelo relacional, DynamoDB exige que cualquier actualización de una tabla se refleje en cada uno de sus índices. DynamoDB gestiona esto mediante un servicio denominado "propagador de registros", que se suscribe a los registros de replicación en cada nodo y envía solicitudes adicionales de inserción, actualización y eliminación a los índices según sea necesario. [ 22 ] Dado que los índices generan una disminución considerable del rendimiento en las solicitudes de escritura, DynamoDB permite a un usuario un máximo de cinco índices en cualquier tabla. [ 23 ]
Ejecución de consultas
Supongamos que un usuario de DynamoDB realiza una operación de escritura (Put, Update o Delete). Mientras que un sistema relacional típico convertiría la consulta SQL a álgebra relacional y ejecutaría algoritmos de optimización, DynamoDB omite ambos procesos. [ 22 ] La solicitud llega al enrutador de solicitudes de DynamoDB, que la autentica —«¿La solicitud proviene de dónde/quién dice ser?»— y verifica la autorización —«¿El usuario que envía la solicitud tiene los permisos necesarios?» Si estas verificaciones son exitosas, el sistema aplica un hash a la clave de partición de la solicitud para que llegue a la partición correspondiente. Dentro de la partición hay tres nodos, cada uno con una copia de los datos de la partición. El sistema primero escribe en el nodo líder, luego en un segundo nodo, después envía un mensaje de «éxito» y finalmente continúa la propagación al tercer nodo. Las escrituras son consistentes porque siempre viajan primero a través del nodo líder.
Finalmente, el propagador de registros propaga el cambio a todos los índices. Para cada índice, obtiene el valor de la clave primaria del elemento y luego realiza la misma escritura en ese índice sin propagación de registros. Si la operación es una actualización de un elemento preexistente, el atributo actualizado puede servir como clave primaria para un índice, por lo que el árbol B de ese índice también debe actualizarse. Los árboles B solo manejan operaciones de inserción, eliminación y lectura, por lo que, en la práctica, cuando el propagador de registros recibe una operación de actualización, emite una operación de eliminación y una operación de inserción a todos los índices.
Supongamos ahora que un usuario de DynamoDB realiza una operación Get. El enrutador de solicitudes procede como antes con la autenticación y la autorización. A continuación, como se indicó anteriormente, aplicamos un hash a nuestra clave de partición para obtener el hash correspondiente. Ahora bien, surge un problema: con tres nodos en consistencia eventual entre sí, ¿cómo podemos decidir cuál investigar? DynamoDB ofrece al usuario dos opciones al realizar una lectura: consistente y eventualmente consistente. Una lectura consistente visita el nodo líder. Sin embargo, la disyuntiva entre consistencia y disponibilidad vuelve a manifestarse aquí: en sistemas con muchas lecturas, leer siempre del líder puede sobrecargar un solo nodo y reducir la disponibilidad.
La segunda opción, una lectura con consistencia eventual , selecciona un nodo aleatorio. En la práctica, aquí es donde DynamoDB sacrifica la consistencia por la disponibilidad. Si elegimos esta opción, ¿cuál es la probabilidad de una inconsistencia? Necesitaríamos que una operación de escritura devolviera "éxito" y comenzara a propagarse al tercer nodo, pero sin finalizar. También necesitaríamos que nuestra operación Get se dirigiera a este tercer nodo. Esto significa una probabilidad de 1 entre 3 de inconsistencia dentro de la ventana de propagación de la operación de escritura. ¿Cuánto dura esta ventana? Diversas catástrofes podrían provocar que un nodo se retrase, pero en la gran mayoría de los casos, el tercer nodo se actualiza en cuestión de milisegundos con respecto al líder.
Controversias
Una condición de carrera en un componente de DynamoDB provocó una interrupción de 14 horas en la región US-EAST-1 de Amazon el 19 de octubre de 2025, [ 24 ] lo que resultó en interrupciones generalizadas de los servicios globales. [ 25 ]
Véase también
Referencias
- ↑ "Amazon DynamoDB: un servicio de base de datos NoSQL rápido y escalable diseñado para aplicaciones a escala de Internet - All Things Distributed" . www.allthingsdistributed.com . 18 de enero de 2012.
- ↑ "¿Qué es Amazon DynamoDB?" .
- 1 2 Vogels, Werner (18 de enero de 2012). "Amazon DynamoDB: un servicio de base de datos NoSQL rápido y escalable diseñado para aplicaciones a escala de Internet" . Blog All Things Distributed . Recuperado el 21 de enero de 2012 .
- ↑ "Cómo DynamoDB de Amazon ayudó a reinventar las bases de datos" . Network World . Consultado el 30 de noviembre de 2023 .
- ↑ brockmeier 1, joe (18-01-2012). "Amazon vuelve a intentarlo con NoSQL con DynamoDB" . ReadWrite . Consultado el 30-11-2023 .
- ^ DeCandia , Giuseppe; Hastorún, Deniz; Jampani, Madán; Kakulapati, Gunavardhan; Lakshmán, Avinash; Pilchín, Alex; Sivasubramanian, Swaminathan; Vosshall, Peter; Vogels, Werner (octubre de 2007). "Dynamo: la tienda de valores clave de alta disponibilidad de Amazon". Opera SIGOPS. Sistema. Rdo . 41 (6): 205– 220. doi : 10.1145/1323293.1294281 . ISSN 0163-5980 .
- 1 2 3 4 "Componentes principales de Amazon DynamoDB - Amazon DynamoDB" . docs.aws.amazon.com . Consultado el 28 de mayo de 2023 .
- ↑ "Tipos de datos y reglas de nomenclatura compatibles en Amazon DynamoDB - Amazon DynamoDB" . docs.aws.amazon.com . Consultado el 28 de mayo de 2023 .
- 1 2 "Creación de un diseño de tabla única con Amazon DynamoDB" . 26 de julio de 2021.
- 1 2 "Diseño de tabla única frente a diseño de múltiples tablas en Amazon DynamoDB" .
- 1 2 "Fundamentos del modelado de datos en DynamoDB" .
- 1 2 "Mejores prácticas para el manejo de datos de series temporales en DynamoDB" .
- 1 2 "Guía prescriptiva de AWS para habilitar la persistencia de datos en microservicios" .
- 1 2 "Crea un almacén de eventos CQRS con Amazon DynamoDB" . 26 de septiembre de 2022.
- 1 2 Dhingra, Aman; MacKay, Mike (30 de agosto de 2024). Amazon DynamoDB: La guía definitiva: Explore NoSQL empresarial, sin servidor y con rendimiento predecible y escalable . Packt Publishing. ISBN 9781803248325.
- ↑ "Solución de problemas de latencia en Amazon DynamoDB" .
- ↑ "Uso de expresiones en DynamoDB" .
- ↑ "Uso del tiempo de vida (TTL) en DynamoDB" .
- ↑ "DynamoDB y bloqueo optimista con número de versión" .
- 1 2 Gunasekara, Archie (27-06-2016). "Una inmersión profunda en las particiones de DynamoDB" . Shine Solutions Group . Recuperado el 03-08-2019 .
- ↑ "Guía para desarrolladores de Amazon DynamoDB" . AWS . 10 de agosto de 2012. Consultado el 18 de julio de 2019 .
- 1 2 3 4 AWS re:Invent 2018: Amazon DynamoDB bajo el capó: Cómo construimos una base de datos hiperescalable (DAT321) , 27 de noviembre de 2018 , consultado el 3 de agosto de 2019
- ↑ "Cuotas de servicio, cuenta y tabla en Amazon DynamoDB - Amazon DynamoDB" . docs.aws.amazon.com . Consultado el 9 de enero de 2024 .
- ↑ "Resumen de la interrupción del servicio Amazon DynamoDB en la región del norte de Virginia (US-EAST-1)" . AWS . Consultado el 28 de octubre de 2025 .
- ↑ "Un único punto de fallo provocó la interrupción del servicio de Amazon que afectó a millones de personas" . Ars Technica . Consultado el 28 de octubre de 2025 .
Enlaces externos
- Sitio web oficial
- Vídeo: AWS re:Invent 2019: [REPETIR 1] Análisis en profundidad de Amazon DynamoDB: Patrones de diseño avanzados (DAT403-R1)
- Servicios web de Amazon
- Almacenamiento en la nube
- Almacenes de datos distribuidos
- Almacenamiento estructurado
- NoSQL
- bases de datos en la nube
- Propiedades de Internet establecidas en 2012
- Bases de datos clave-valor