Volver al curso

Cloud Computing con AWS: Arquitectura y Servicios

leccion
8 / 12
intermediate
28 horas
Bases de Datos y Servicios de Alto Nivel

DynamoDB y ElastiCache: NoSQL y Caching

Lectura
50 min~2 min lectura

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.

CaracteristicaDynamoDBRDS/Aurora
ModeloKey-Value / DocumentRelacional (SQL)
EsquemaFlexible (schema-less)Rigido (schema-on-write)
EscalabilidadIlimitada, automaticaVertical + read replicas
Latencia< 10ms siempreVariable (1-100ms)
CostoPay-per-request o provisionedPor hora de instancia
Ideal paraAlta escala, baja latenciaQueries 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.

NoSQL y caching

DynamoDB + ElastiCache es una combinacion poderosa para apps de alta escala.