目次

Análisis profundo de Amazon DynamoDB

Guía de “diseño NoSQL escalable” comparando con Cloud Bigtable, Cloud Firestore y Azure Cosmos DB

Introducción (puntos clave)

  • En este artículo nos centramos en Amazon DynamoDB y lo comparamos con Google Cloud Bigtable / Cloud Firestore y Azure Cosmos DB para aclarar cómo pensar el diseño de bases de datos NoSQL escalables.
  • Amazon DynamoDB es una base de datos NoSQL totalmente gestionada, sin servidor, de tipo clave-valor / documento, diseñada para escalar horizontalmente a escala de internet con latencias de milisegundos de dígito único.
  • En GCP, Cloud Bigtable es una base de datos NoSQL de columnas anchas para datos a gran escala, mientras que Cloud Firestore es una base de datos de documentos orientada a apps móviles y web. En Azure, Cosmos DB se posiciona como una base de datos NoSQL / vectorial multimodelo y distribuida globalmente.
  • El núcleo del diseño es:
    1. Empezar por el caso de uso y los patrones de acceso, pensando en un “diseño de tabla única”.
    2. Usar la clave de partición y la clave de ordenación para decidir cómo escalar.
    3. Usar GSIs/LSIs, índices y cachés para optimizar las consultas.
    4. Controlar costes usando capacidad a demanda / aprovisionada y autoescalado.
    5. Asegurar extensibilidad futura con tablas globales e integración dirigida por eventos.
  • Lectores objetivo:
    • Desarrolladores backend de aplicaciones web / móviles
    • Ingenieros que trabajan en juegos, e-commerce, SaaS y otros servicios con usuarios y tráfico en rápido crecimiento
    • Arquitectos que estén considerando migrar desde RDBMS
    • Líderes técnicos / SRE que quieran evaluar opciones NoSQL también en GCP / Azure
  • Al final, el objetivo es que puedas explicar con tus propias palabras “Dadas estas condiciones, cuál de DynamoDB / Bigtable / Firestore / Cosmos DB deberíamos usar y cómo deberíamos diseñarlo”.

1. ¿Qué es DynamoDB? — El “motor NoSQL a escala de internet” de AWS

1.1 Resumen del servicio y características

Amazon DynamoDB es una base de datos NoSQL totalmente gestionada y sin servidor proporcionada por AWS.
Sus características principales pueden resumirse así:

  • Admite modelos de datos clave-valor y documento (hasta unos 400 KB por ítem).
  • Está diseñado para latencias de milisegundos de dígito único, de modo que mantiene un rendimiento predecible incluso cuando aumentan las solicitudes y el volumen de datos.
  • Es totalmente gestionado y sin servidor: no hace falta gestionar instancias, parches ni sharding. La capacidad se controla mediante facturación bajo demanda o capacidad aprovisionada más autoescalado.
  • Soporta tablas globales multirregión, multi-activo, con replicación automática entre regiones.
  • Ofrece copias de seguridad automáticas, recuperación point-in-time, cifrado y una caché en memoria (DAX) para acelerar el acceso.

En pocas palabras, DynamoDB representa un mundo donde te alejas de esquemas rígidos de RDBMS y joins, y en su lugar diseñas las tablas según los patrones de acceso.

1.2 Posicionamiento respecto a otros servicios NoSQL en la nube

Coloquémoslo, a grandes rasgos, junto a otros servicios:

  • DynamoDB (AWS)
    • Clave-valor + documento; muy fuerte para cargas online a escala de internet.
  • Cloud Bigtable (GCP)
    • NoSQL de columnas anchas. Ideal para datos de series temporales, métricas, IoT, backends analíticos: conjuntos de datos grandes y continuos.
  • Cloud Firestore (GCP / Firebase)
    • Base de datos de documentos especializada en sincronización en tiempo real y soporte offline para apps móviles / frontend.
  • Azure Cosmos DB
    • Base de datos NoSQL / vectorial multimodelo y distribuida globalmente, con modelos de consistencia configurables como característica clave.

Puedes ver DynamoDB como óptimo para OLTP de muy alto rendimiento y cargas online de cara al usuario, Bigtable para datos masivos de tipo serie temporal / analítico, Firestore para integración estrecha con clientes móviles y web, y Cosmos DB para distribución multirregión y flexibilidad multimodelo.


2. Modelo de datos de DynamoDB y conceptos básicos

2.1 Tablas, claves de partición y claves de ordenación

Las tablas de DynamoDB se construyen en torno a una clave de partición (obligatoria) y una clave de ordenación opcional.

  • Clave de partición
    • Es el factor central de distribución de datos y escalabilidad. Si los valores están sesgados, tendrás particiones calientes, lo que provoca degradación de rendimiento.
  • Clave de ordenación (sort key)
    • Define el orden dentro de una misma clave de partición. Si usas aquí marcas de tiempo o tipos, las consultas por rango se vuelven mucho más sencillas.

Cada ítem puede tener atributos (columnas) flexibles y, en la práctica, la tabla es “sin esquema”. Al crearla, básicamente defines las claves; el resto de atributos pueden variar de un ítem a otro.

2.2 Diseñar partiendo de los patrones de acceso

En el diseño clásico de RDBMS, la mentalidad es “normalizar → ya veremos después las consultas”.
Con DynamoDB, la mentalidad es “enumerar primero los patrones de acceso y derivar a partir de ahí el diseño de tabla y claves”.

Por ejemplo, en un sistema e-commerce de productos y pedidos, podrías listar patrones como:

  • “Obtener el historial de pedidos de un usuario en orden cronológico descendente”
  • “Obtener los detalles de un pedido por ID de pedido”
  • “Obtener registros de inventario por ID de producto”

Para cada patrón de acceso, decides entonces una clave de partición + clave de ordenación, y los índices adicionales necesarios.

2.3 GSI / LSI (índices secundarios)

DynamoDB no está pensado para consultas ad-hoc arbitrarias como en un RDBMS. En su lugar, dependes de índices secundarios para crear vistas adicionales.

  • Índice secundario local (LSI)
    • Comparte la misma clave de partición que la tabla base pero usa una clave de ordenación distinta, dándote múltiples vistas ordenadas por partición.
  • Índice secundario global (GSI)
    • Puedes verlo como una tabla lógica separada con su propia definición de clave, respaldada por la tabla base. Puedes definir libremente tanto la clave de partición como la de ordenación.

Firestore y Cosmos DB también requieren un diseño cuidadoso de índices, pero con DynamoDB la necesidad de dibujar el mapa completo de patrones de acceso e índices desde el principio es especialmente fuerte.


3. Casos de uso típicos — ¿Cuándo elegir DynamoDB?

3.1 Perfiles de usuario, sesiones y datos de autenticación

  • Ideal para SNS, juegos, SaaS y otros dominios con gran número de usuarios y lecturas/escrituras aleatorias.
  • Usa el ID de usuario como clave de partición y almacena:
    • Perfil
    • Ajustes
    • Sesión
      juntos, siguiendo el patrón de “diseño de tabla única” popular en el mundo de DynamoDB.

3.2 Carritos de compra e historial de pedidos

  • Los carritos y pedidos son un ejemplo de libro donde es muy común el acceso por usuario, ordenado por tiempo.
  • Si diseñas tus claves como PK = USER#<userid>, SK = ORDER#<timestamp>,
    puedes recuperar fácilmente los pedidos de un usuario en orden cronológico.
  • Una razón por la que DynamoDB se usa extensamente en retail y e-commerce es que escala horizontalmente bajo picos de carga, como rebajas o campañas.

3.3 IoT, logs y almacenes de eventos

  • Muy adecuado para cargas que implican ingesta de alta velocidad y consultas sobre datos recientes, como flujos de sensores y registros de eventos.
  • Para analítica de “histórico completo”, sin embargo, suele ser más realista combinar DynamoDB con otros almacenes como Bigtable, BigQuery o S3 + Athena.

3.4 Cuándo brillan Bigtable / Firestore / Cosmos DB

  • Bigtable: datos a gran escala, continuos, que requieren procesamiento rápido y de baja latencia, como métricas, series temporales, logs y feature stores para ML.
  • Firestore: apps móviles / frontend que necesitan sincronización en tiempo real y soporte offline.
  • Cosmos DB: grandes aplicaciones SaaS o empresariales que requieren distribución global, soporte multimodelo y opciones flexibles de consistencia.

4. Rendimiento y escalabilidad — El diseño de particiones lo es todo

4.1 Throughput por solicitud

Internamente, DynamoDB divide las tablas en particiones (shards físicos), cada una con capacidad de throughput fija.

  • Si tu clave de partición está sesgada, todas las solicitudes ligadas a esa clave caen en la misma partición, lo que provoca throttling (ProvisionedThroughputExceededException).
  • Por tanto, “cómo distribuyes las claves” es el corazón del diseño de escalado.

4.2 Ejemplos de buenas prácticas

  • Evita IDs autoincrementales; en su lugar, utiliza IDs que combinen hashing + tiempo.
  • Fragmenta por algo como “ID de usuario × fecha” para que los datos de un mismo usuario se distribuyan entre particiones.
  • Introduce “números de bucket” en las claves de partición para repartir la carga entre varias particiones.

Bigtable también requiere diseñar cuidadosamente los prefijos de las row keys para distribuir la carga. Cosmos DB igualmente depende mucho del diseño de la clave de partición para throughput y coste.


5. Modelos de capacidad y diseño de costes

5.1 Capacidad On-Demand vs Provisioned

DynamoDB ofrece dos modelos principales de capacidad:

  1. On-Demand Capacity Mode

    • No necesitas fijar el throughput de antemano. Escala automáticamente con el volumen de peticiones y pagas por solicitud.
    • Ideal para patrones de tráfico impredecibles y cargas de trabajo tempranas / PoCs.
  2. Provisioned Capacity Mode

    • Defines por adelantado unidades de capacidad de lectura/escritura (RCU/WCU).
    • Combinado con autoescalado, facilita optimizar costes en cargas más estables.

Cloud Bigtable también factura según nodos y throughput; Firestore y Cosmos DB se basan en número de peticiones o RUs. En todos estos sistemas, el coste se controla ajustando bien el throughput.

5.2 Puntos de diseño para optimizar costes

  • No abuses de GSIs/LSIs: también generan coste de lectura/escritura.
  • Si metes demasiado en un solo ítem, llegarás antes al límite de 400 KB por ítem; si fragmentas demasiado, aumentan las peticiones. Hay que encontrar un equilibrio.
  • Para rutas de lectura muy calientes, usa DAX (DynamoDB Accelerator) o cachés a nivel de aplicación para reducir RCUs.

6. Fiabilidad, seguridad y distribución global

6.1 Tolerancia a fallos y copias de seguridad

  • Dentro de una región de AWS, DynamoDB se replica entre múltiples AZs, por lo que resiste fallos de una sola zona de disponibilidad.
  • Soporta copias de seguridad bajo demanda y recuperación point-in-time (PITR), lo que facilita volver atrás tras borrados o actualizaciones accidentales.

Bigtable y Cosmos DB también asumen configuraciones redundantes dentro y entre regiones, y Firestore permite elegir configuraciones regionales / multirregionales. La alta disponibilidad es prácticamente un estándar en los servicios NoSQL gestionados modernos.

6.2 Tablas globales y multirregión

  • Las tablas globales de DynamoDB replican automáticamente los datos entre las regiones seleccionadas y permiten escrituras locales en cualquier región (arquitectura “multi-activa”).
  • Cosmos DB también ofrece distribución global y varios niveles de consistencia, siendo una opción popular para SaaS desplegados globalmente.

6.3 Seguridad y control de acceso

  • Puedes usar IAM y políticas basadas en recursos para controlar el acceso a nivel de tabla y de ítem.
  • También están disponibles cifrado con KMS y acceso privado mediante VPC endpoints.

Firestore y Cosmos DB proporcionan roles de IAM, control de acceso basado en roles y autenticación con claves. En todos los casos, el principio de diseño es “conceder el mínimo privilegio posible por identidad de aplicación”.


7. Ejemplo de diseño: e-commerce con tabla única

Veamos un ejemplo sencillo usando una sola tabla.

7.1 Visión general de la estructura de la tabla

Nombre de tabla: ecommerce

  • PK (partition key): PK
  • SK (sort key): SK

Ejemplos de ítems:

PK SK type attributes
USER#123 PROFILE USER name, email, created_at
USER#123 ORDER#2025-11-20T10:00Z ORDER total, status, items…
USER#123 ORDER#2025-11-21T09:00Z ORDER
PRODUCT#ABC META PRODUCT title, price, stock
PRODUCT#ABC INVENTORY#TOKYO INV quantity
PRODUCT#ABC INVENTORY#OSAKA INV quantity

Con este diseño:

  • “Historial de pedidos del usuario 123”:
    • Consulta ítems donde PK = USER#123, ordenando por SK descendente.
  • “Información e inventario del producto ABC”:
    • Consulta ítems donde PK = PRODUCT#ABC y obtén todos los tipos de ítem de ese producto.

Este diseño permite expresar los patrones de acceso más comunes en una sola tabla de forma natural.

7.2 Ejemplo de GSI: pedidos recientes por producto

Si quieres ver pedidos recientes por ID de producto, puedes crear un GSI que te dé otra “vista”.

  • GSI1
    • GSI1PK = PRODUCT#<productId>
    • GSI1SK = ORDER#<timestamp>

Añade atributos GSI1PK y GSI1SK a los ítems de pedido y consulta GSI1 cuando necesites listas de pedidos centradas en el producto.
En Firestore lograrías algo similar usando colecciones / subcolecciones + índices compuestos; en Cosmos DB, claves de partición + índices pueden proporcionar vistas equivalentes.


8. Errores habituales y cómo evitarlos

8.1 Diseñar el esquema con mentalidad de RDB

  • Si aplicas directamente “normalizar tablas primero y ver luego las consultas”, a menudo acabarás con:

    • Sin joins
    • Una explosión de GSIs para cada patrón de acceso
    • Throughput y costes disparados
  • Contramedida:

    • Enumera todos los patrones de acceso por pantalla o API antes de diseñar el esquema.
    • Luego deriva la estructura de tablas, claves e índices a partir de esos patrones.

8.2 Claves de partición sesgadas

  • Es difícil detectar esto en entornos de desarrollo o prueba con pocos usuarios, pero al pasar a producción los puntos calientes de claves provocan throttling y mayor latencia.
  • Contramedida:
    • Usa métricas y logs de CloudWatch para visualizar la distribución de claves.
    • Revisa el diseño de claves pronto, usando hashing o buckets de sharding según sea necesario.

8.3 Abusar de los GSIs

  • Los GSIs son potentes, pero cada escritura actualiza también los GSIs, lo que incrementa coste y latencia.
  • Contramedida:
    • Pregúntate si realmente necesitas esa vista en tiempo real para OLTP, o si la analítica puede derivarse a otro almacén.
    • Para patrones de acceso poco frecuentes, considera tablas separadas o S3 + Athena en lugar de más GSIs.

9. ¿Quién se beneficia y cómo? (beneficios concretos según el rol)

9.1 Desarrolladores backend / de aplicación

  • Entenderás DynamoDB, Firestore, Cosmos DB y otros sistemas NoSQL no como un “NoSQL misterioso”, sino como bases de datos que deben diseñarse según patrones de acceso.
  • Esto te permitirá proponer modelos de datos con más confianza, que sean:
    • Robustos bajo escala
    • Resistentes al cambio
    • Predecibles en coste

9.2 SRE, ingenieros de infraestructura y equipos de data platform

  • Tendrás una visión más clara de las preocupaciones operativas: diseño de particiones, modelos de capacidad, tablas globales, cachés, etc.
  • Comparando con Bigtable y Cosmos DB, te resultará más sencillo decidir qué carga de trabajo corresponde a qué servicio.

9.3 Arquitectos, tech leads y CTOs

  • Ganarás una perspectiva para dividir un sistema antes centrado por completo en RDBMS en:

    • Áreas fuertemente transaccionales que se quedan en RDS / Aurora” y
    • Áreas de alto throughput y foco en escalabilidad que se mueven a DynamoDB / Bigtable / Cosmos DB

    —es decir, una arquitectura de capa de datos híbrida.

  • Para estrategias multicloud, podrás razonar sobre similitudes y diferencias entre las ofertas NoSQL de las distintas nubes de forma estructurada.


10. Tres cosas que puedes hacer hoy mismo

  1. Anota 10 patrones de lectura/escritura de tu propio servicio.

    • Para cada pantalla o API, apunta aproximadamente: “¿Qué clave? ¿Cuántas lecturas/escrituras?”
  2. Elige 1–2 de esos patrones y mapéalos a un diseño de tabla en DynamoDB.

    • Sobre papel, esboza PK / SK / GSIs candidatos / ejemplos de ítems. Solo esto ya te ayuda a ver el espacio de diseño.
  3. Pregúntate cómo se vería el mismo diseño en Bigtable / Firestore / Cosmos DB.

    • Intenta mapearlo a row keys, colecciones/documentos, claves de partición/contenedores, etc. Esto construye una sensibilidad de buen diseño independiente de la nube.

11. Conclusión: DynamoDB como puerta de entrada al diseño “access-pattern-first”

Amazon DynamoDB es:

  • Un motor NoSQL sin servidor que escala a escala de internet, y
  • Un sistema donde el rendimiento y el coste dependen en gran medida del diseño de clave de partición / clave de ordenación / índices, y
  • Una base de datos que te exige diseñar las tablas a partir de los patrones de acceso, un cambio respecto a la mentalidad RDB.

Al mismo tiempo, Bigtable / Firestore en GCP y Cosmos DB en Azure tienen cada uno sus puntos fuertes. No hay una única “respuesta correcta”: la mejor elección depende de tu caso de uso y del contexto de tu organización.

Lo que más importa es:

  • “¿Con qué frecuencia, por quién y en qué forma se leerá y escribirá este dato?”
  • “¿Hasta dónde esperamos que escale y cuán fuerte debe ser la consistencia?”

Piensa bien en esas preguntas y, a partir de ahí, trabaja hacia atrás para elegir DynamoDB u otros servicios NoSQL.

Si empiezas pequeño —con una tabla pequeña o un PoC— irás desarrollando poco a poco un sentido de “modelado de datos que no asusta ni siquiera a escala”.
Tómate tu tiempo, disfruta del proceso y convierte a DynamoDB y a las demás opciones NoSQL en la nube en herramientas que trabajen para ti, no contra ti.


Referencias (documentación oficial y guías)

Nota: los precios, límites y nuevas funcionalidades pueden cambiar con el tiempo. Al diseñar o desplegar sistemas reales, revisa siempre la documentación oficial y las páginas de precios más recientes.

por greeden

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)