DynamoDB: Base de Datos NoSQL Serverless
DynamoDB es la base de datos key-value y document de AWS. Ofrece latencia de un digito de milisegundo a cualquier escala, con capacidad virtualmente ilimitada. Es serverless: no hay servidores que gestionar, parchar o escalar manualmente.
| Caracteristica | DynamoDB | RDS/Aurora |
|---|---|---|
| Modelo | Key-Value / Document | Relacional (SQL) |
| Esquema | Flexible (schema-less) | Rigido (schema-on-write) |
| Escalabilidad | Ilimitada, automatica | Vertical + read replicas |
| Latencia | < 10ms siempre | Variable (1-100ms) |
| Costo | Pay-per-request o provisioned | Por hora de instancia |
| Ideal para | Alta escala, baja latencia | Queries complejas, JOINs |
import boto3
from boto3.dynamodb.conditions import Key
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('Usuarios')
# Escribir item
table.put_item(Item={
'user_id': 'usr_123',
'email': '[email protected]',
'nombre': 'Juan Garcia',
'plan': 'pro',
'pais': 'AR',
'created_at': '2025-01-15T10:30:00Z'
})
# Leer item (por primary key)
response = table.get_item(Key={'user_id': 'usr_123'})
user = response['Item']
# Query (por partition key + sort key)
response = table.query(
KeyConditionExpression=Key('pais').eq('AR') & Key('created_at').begins_with('2025'),
IndexName='pais-created-index'
)ElastiCache: Caching en Memoria
ElastiCache proporciona Redis o Memcached managed. Un cache bien implementado puede reducir la latencia de tu app de 100ms a 1ms y la carga en tu base de datos un 80%.
import redis
cache = redis.Redis(host='mi-cache.xxx.cache.amazonaws.com', port=6379)
def get_user_profile(user_id):
# Intentar cache primero
cached = cache.get(f'user:{user_id}')
if cached:
return json.loads(cached)
# Cache miss: ir a la base de datos
user = db.query('SELECT * FROM users WHERE id = %s', user_id)
# Guardar en cache por 5 minutos
cache.setex(f'user:{user_id}', 300, json.dumps(user))
return user🚀 Dato Clave
Patron Cache-Aside (Lazy Loading): la app primero busca en cache; si no encuentra, consulta la DB y guarda en cache. Write-Through: cada escritura a DB tambien escribe al cache. Usa Cache-Aside para la mayoria de los casos.
DynamoDB + ElastiCache es una combinacion poderosa para apps de alta escala.