AZ-305

Deep Dive

D2 · Almacenamiento de Datos

Diseño de Datos No Relacionales

Cosmos DB domina este bloque del AZ-305: elegir la API correcta, diseñar la partition key, escoger el nivel de consistencia que balancea latencia y corrección, y decidir la topología multi-región. Más las alternativas: Table Storage, Redis y AI Search.

🗄️Árbol de decisión — Cosmos DB API y NoSQL

NoSQL · MongoDB · Cassandra · Gremlin · Table · Azure Table

Interactivo

Pregunta 1

¿Es un proyecto nuevo o estás migrando una app existente?

💡 Para migraciones el driver es la compatibilidad de wire-protocol — no reescribir nada. Para proyectos nuevos, elige la API que mejor modela tus datos.

Icon-databases-121

Cosmos DB: APIs y cuándo usar cada una

APIModeloCuándo
NoSQL (Core)Documentos JSON, query SQL-likeDefault para apps nuevas — la API nativa con todas las features primero
MongoDBDocumentos BSON, wire protocol MongoMigrar apps MongoDB existentes sin reescribir drivers
CassandraWide-column, CQLMigrar workloads Cassandra
GremlinGrafos (vértices/aristas)Relaciones complejas: redes sociales, recomendaciones, fraude
TableKey-valueUpgrade de Azure Table Storage: latencia garantizada, distribución global, índices en todo
PostgreSQL (Citus)Postgres distribuidoRelacional con sharding horizontal nativo
Icon-databases-121

Particionado y Request Units

Request Units (RU/s) son la moneda de capacidad de Cosmos: 1 RU ≈ leer un item de 1 KB por id. Toda operación cuesta RUs. El throughput se aprovisiona (manual o autoscale) o se paga por uso (serverless). Las RUs se reparten uniformemente entre particiones físicas — por eso la partition key es LA decisión de diseño.

Partition key — criterios

  • Alta cardinalidad: muchos valores distintos (userId sí, country no)
  • • Distribuye uniformemente las ESCRITURAS (evitar hot partitions)
  • • Aparece en los filtros de las queries más frecuentes (evita cross-partition queries caras)
  • • Límite: 20 GB por partición lógica
  • • Hierarchical partition keys (ej: tenantId/userId) para multi-tenant que supera 20 GB por tenant

Modos de throughput

  • Provisioned manual: RU/s fijas — workload estable y predecible
  • Autoscale: escala entre 10%-100% del máximo — picos variables (cuesta 1.5x la RU pero ahorra si hay valles)
  • Serverless: paga por RU consumida — tráfico intermitente/impredecible, dev/test. Sin distribución multi-región de escritura
Icon-databases-121

Los 5 niveles de consistencia

NivelGarantíaEscenario
StrongLecturas siempre ven la última escritura confirmada (linealizable)Saldos bancarios, inventario crítico. Mayor latencia; escrituras multi-región limitadas
Bounded StalenessLag acotado: máximo K versiones o T segundos de retrasoMarcadores deportivos, precios de bolsa con retraso tolerado y acotado
Session (default)Dentro de una sesión: lees tus propias escriturasEl default correcto para la mayoría de apps — perfil de usuario, carritos
Consistent PrefixNunca ves escrituras fuera de orden (pero puedes ver versiones viejas)Feeds donde el orden importa más que la frescura
EventualConvergencia eventual, sin garantía de ordenContadores de likes, retweets — máxima velocidad y disponibilidad

Cómo memorizarlo

De Strong a Eventual: menos consistencia = menos latencia + más disponibilidad + menor costo de RU en lecturas. "Leer mis propias escrituras" → Session. "Retraso máximo de 5 segundos" → Bounded Staleness. "Nunca datos desordenados pero tolera antigüedad" → Consistent Prefix.

Icon-databases-121

Distribución global y multi-región

Single-region write + read replicas

  • Escrituras en una región, lecturas locales en N regiones
  • Failover automático de escritura si la región primaria cae (service-managed failover)
  • Más simple: sin conflictos de escritura
  • SLA lectura 99.999% multi-región

Multi-region writes

  • Escrituras aceptadas en TODAS las regiones — latencia de escritura local
  • SLA escritura 99.999%
  • Requiere resolución de conflictos: Last-Writer-Wins (default) o custom
  • No compatible con consistencia Strong entre regiones lejanas

Extras de diseño

  • Change feed: stream de cambios para materialized views, eventos y ETL incremental (lo consume Functions/Spark)
  • TTL por contenedor/item para expirar datos automáticamente
  • Analytical store + Synapse Link: analítica HTAP sin afectar las RUs transaccionales
  • • Backup: continuo (point-in-time restore) o periódico
Icon-databases-137

Alternativas: Table Storage, Redis, AI Search

ServicioCuándo elegirlo sobre Cosmos
Azure Table StorageKey-value simple, MUY barato, sin requisitos de latencia garantizada ni distribución global. Logs, metadata, configuraciones
Azure Cache for RedisCache in-memory sub-milisegundo DELANTE de otra DB (cache-aside), session store, pub/sub volátil. No es la base de datos primaria. Tiers: Basic (dev), Standard (HA), Premium (persistencia, clustering, geo-replication), Enterprise (módulos Redis Stack, activo-activo global)
Azure AI SearchBúsqueda full-text, facetas, vectores/semántica sobre datos de otros stores (indexers desde Cosmos/SQL/Blob)
Blob StorageEl objeto ES el dato (imágenes, vídeos, backups) — no necesita queries sobre su contenido

Tabla de decisión

RequisitoDiseño
Usuarios globales escriben con latencia localCosmos multi-region writes (+ resolución de conflictos)
El usuario debe ver inmediatamente lo que él mismo escribióConsistencia Session
Datos financieros: toda lectura ve la última escrituraConsistencia Strong (single region o regiones cercanas)
Multi-tenant SaaS, queries siempre filtran por tenantPartition key = tenantId (o jerárquica tenantId/entityId)
Tráfico con picos x10 impredeciblesThroughput autoscale
Reaccionar a cada cambio de datos con una FunctionChange feed + Azure Functions trigger
Migrar app MongoDB sin reescribirCosmos DB API for MongoDB
Key-value barato sin SLAs estrictosAzure Table Storage
Cache de sesiones con latencia sub-msAzure Cache for Redis (Standard/Premium para HA)
Cache Redis con geo-replication o persistencia RDB/AOFAzure Cache for Redis Premium
Analítica sobre datos operacionales sin consumir RUsAnalytical store + Synapse Link

¿Entendiste este tema?

Pon a prueba lo que acabas de aprender

Una app global de e-commerce usa Cosmos DB (API NoSQL). Requisitos: los usuarios de Europa, Asia y América deben escribir con baja latencia en su propia región; un usuario debe ver siempre sus propias acciones recientes (su carrito actualizado); se toleran milisegundos de lag entre regiones. ¿Qué configuración eliges?

Inicia sesión para llevar tu progreso.