Base de datos NoSQL serverless de AWS con latencia de milisegundos a cualquier escala, ideal para aplicaciones que requieren alto rendimiento y escalabilidad automática.
DynamoDB es la base de datos NoSQL serverless de AWS que ofrece latencia consistente de milisegundos sin importar el tamaño de los datos o el volumen de requests. No hay servidores que administrar, parches que aplicar ni capacidad que planificar manualmente.
A diferencia de las bases de datos relacionales, DynamoDB utiliza un modelo de datos flexible donde cada item puede tener diferentes atributos. Su arquitectura distribuida automáticamente particiona los datos usando la partition key, garantizando escalabilidad horizontal sin límites teóricos.
El diseño de DynamoDB prioriza la disponibilidad y la latencia sobre la consistencia fuerte, siguiendo el teorema CAP. Esto significa que las aplicaciones deben diseñarse considerando eventual consistency, aunque ofrece strong consistency como opción para reads específicos.
DynamoDB utiliza un modelo de datos basado en tablas, items y atributos:
Consideremos un sistema de e-commerce con órdenes y clientes:
# Estructura de items en una sola tabla
{
"PK": "CUSTOMER#123",
"SK": "PROFILE",
"name": "Juan Pérez",
"email": "juan@example.com",
"created": "2024-01-15"
}
{
"PK": "CUSTOMER#123",
"SK": "ORDER#456",
"total": 99.99,
"status": "shipped",
"items": ["product-a", "product-b"]
}
{
"PK": "ORDER#456",
"SK": "METADATA",
"customer_id": "123",
"shipping_address": "...",
"payment_method": "card"
}Este patrón permite queries eficientes:
PK = CUSTOMER#123 AND SK = PROFILEPK = CUSTOMER#123 AND SK begins_with ORDER#PK = ORDER#456 AND SK = METADATAPermite queries por atributos diferentes a la primary key. Cada GSI tiene su propia partition key y sort key, con capacidad de throughput independiente.
Cuándo usar GSI:
Comparte la misma partition key que la tabla base pero usa una sort key diferente. Limitado a 10GB por partición.
Cuándo usar LSI:
DynamoDB Streams captura cambios en tiempo real (INSERT, MODIFY, DELETE) y los envía a AWS Lambda o Kinesis. Cada stream record contiene:
{
"eventName": "INSERT",
"dynamodb": {
"Keys": {"PK": {"S": "ORDER#456"}},
"NewImage": {"status": {"S": "created"}, "total": {"N": "99.99"}},
"StreamViewType": "NEW_AND_OLD_IMAGES"
}
}Patrones comunes:
import boto3
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('ecommerce')
# Query con filtro
response = table.query(
KeyConditionExpression=Key('PK').eq('CUSTOMER#123'),
FilterExpression=Attr('status').eq('active'),
Limit=10
)
# Paginación
while 'LastEvaluatedKey' in response:
response = table.query(
KeyConditionExpression=Key('PK').eq('CUSTOMER#123'),
ExclusiveStartKey=response['LastEvaluatedKey'],
Limit=10
)Time to Live (TTL): expira items automáticamente usando un timestamp Unix.
# Configurar TTL en un atributo
table.meta.client.update_time_to_live(
TableName='sessions',
TimeToLiveSpecification={
'AttributeName': 'expires_at',
'Enabled': True
}
)Estrategias de backup:
| Workload | On-demand | Provisioned | Recomendación |
|---|---|---|---|
| Desarrollo/Testing | $0.25 por 1M reads | $0.09 por RCU/mes | On-demand |
| Tráfico predecible (1000 RPS constante) | $648/mes | $233/mes | Provisioned |
| Tráfico esporádico (picos de 5000 RPS) | $324/mes | $1,166/mes | On-demand |
| Aplicación nueva (patrón desconocido) | Variable | Riesgo de throttling | On-demand |
Factores clave:
resource "aws_dynamodb_table" "ecommerce" {
name = "ecommerce"
billing_mode = "PAY_PER_REQUEST"
hash_key = "PK"
range_key = "SK"
attribute {
name = "PK"
type = "S"
}
attribute {
name = "SK"
type = "S"
}
attribute {
name = "GSI1PK"
type = "S"
}
global_secondary_index {
name = "GSI1"
hash_key = "GSI1PK"
projection_type = "ALL"
}
stream_enabled = true
stream_view_type = "NEW_AND_OLD_IMAGES"
point_in_time_recovery {
enabled = true
}
tags = {
Environment = "production"
Service = "ecommerce"
}
}DynamoDB representa un cambio fundamental en el diseño de bases de datos para aplicaciones serverless. Su modelo de pricing por request elimina la necesidad de provisionar capacidad, pero requiere un diseño cuidadoso del schema basado en patrones de acceso específicos.
Para equipos que migran desde bases de datos relacionales, DynamoDB exige repensar la normalización — el single-table design puede parecer contraintuitivo, pero es esencial para minimizar costos y latencia. La ausencia de JOINs significa que la desnormalización y la duplicación de datos son estrategias válidas.
El ecosistema de event-driven architecture se beneficia enormemente de DynamoDB Streams, permitiendo arquitecturas reactivas que escalan automáticamente sin gestión de infraestructura.
Modelo de computación en la nube donde el proveedor gestiona la infraestructura automáticamente, permitiendo ejecutar código sin aprovisionar ni administrar servidores, pagando solo por el uso real.
Servicio de cómputo serverless de AWS que ejecuta código en respuesta a eventos sin necesidad de aprovisionar ni administrar servidores, escalando automáticamente desde cero hasta miles de ejecuciones concurrentes.
Patrón arquitectónico donde los componentes se comunican mediante eventos asíncronos, permitiendo sistemas desacoplados, escalables y reactivos.
Diseño de arquitectura para escalar un segundo cerebro personal a un sistema de producción con AWS serverless — desde el prototipo actual hasta casos de uso especializados en legal, investigación y comunidad.
Colección de 13 módulos Terraform publicados en el Terraform Registry para desplegar arquitecturas serverless en AWS, con 12 ejemplos que cubren desde ECS básico hasta CRUD full-stack con DynamoDB y AgentCore con MCP.
Backend serverless de producción para un grafo de conocimiento personal — DynamoDB, Lambda, Bedrock, MCP, Step Functions. La implementación de la arquitectura descrita en el ensayo «Del prototipo a producción».