Qué es CQRS y cómo separa lectura de escritura

Clase 20 de 43Curso Profesional de Arquitectura de Software

Resumen

Optimiza la lectura y la escritura con confianza usando CQRS: separa responsabilidades y gana velocidad sin perder el modelado del dominio. Cuando un único modelo no rinde bien para ambos escenarios, este enfoque permite crear modelos y hasta bases de datos distintas para cada necesidad.

¿Qué es CQRS y por qué separa lectura y escritura?

CQRS define la separación de responsabilidades entre consultas y comandos. La idea central: cuando es complejo optimizar lectura y escritura con un mismo modelo, conviene dividir en dos modelos e incluso en dos bases de datos. Así, el modelo de escritura se centra en persistir comandos, y el de lectura se optimiza para responder consultas con la mayor fluidez.

En aplicaciones enterprise con dominio estrictamente modelado, el diseño suele quedar optimizado para escritura. Sin embargo, en Internet predomina la lectura de alto volumen y la escritura puntual. Separar modelos permite mantener la calidad del dominio en la escritura y, a la vez, preparar los datos para la mejor lectura posible.

  • Separación de consultas y comandos para reducir fricción entre objetivos distintos.
  • Modelos de lectura y escritura diseñados con métricas de rendimiento diferentes.
  • Posibilidad de separar bases de datos según la carga y el acceso.
  • En Internet: mucha lectura y escritura ocasional.
  • Habilidad clave: detectar cuándo un único modelo no alcanza para optimizar ambos lados.

¿Cómo se aplica en reportes y e-commerce?

Un ejemplo práctico aparece en e-commerce: el administrador crea productos (escritura) y el consumidor los consulta (lectura). Para estos casos, los modelos pueden ser similares y funcionar bien. Pero los reportes de ventas combinan consumos de clientes y productos con otra lógica: están relacionados de forma lateral y no encajan de forma natural en el modelo de escritura.

Aplicar CQRS de forma puntual a reportes es útil cuando el esfuerzo de lectura para ajustarse al modelo transaccional es alto. Así se optimiza la lectura de reportes sin reestructurar toda la aplicación.

  • Escritura en un modelo transaccional para operaciones del negocio.
  • Lectura con un modelo preparado para agregaciones y consultas de reportes.
  • Uso selectivo de CQRS donde realmente aporta valor.

¿Cuándo aplicar solo en una parte del sistema?

Cuando el modelo de escritura sirve para operaciones transaccionales, pero no para consultas analíticas o de alto volumen. En esos casos, implementar CQRS únicamente en reportes reduce complejidad y mejora la performance de lectura.

¿Qué relación tiene con event sourcing y qué trade-offs existen?

Event sourcing recibe comandos y escribe eventos en una base de datos de eventos. Luego expone un modelo de lectura diferente: el estado actual. Por eso, es común que event sourcing incorpore o comparta el patrón CQRS: comandos generan eventos (escritura) y las consultas leen un estado derivado (lectura), cada uno optimizado para su propósito.

  • Escritura: eventos que registran cambios de forma inmutable.
  • Lectura: estado actual preparado para consultas.
  • Sincronía conceptual con CQRS al separar responsabilidades.

Ahora, los trade-offs. Mantener dos modelos y dos bases de datos tiene costos: hay que evolucionar ambos cuando aparecen nuevas funcionalidades o se detectan imprecisiones. No es un patrón universal, sino puntual: conviene adoptarlo cuando va a brillar en casos claros como reportes o altos volúmenes de lectura.

  • Costo de mantenimiento creciente al evolucionar dos modelos.
  • Complejidad operativa al sincronizar cambios y despliegues.
  • Habilidad clave: evaluar beneficio real antes de introducir la separación.

¿Dónde ves que CQRS aportaría más valor en tu contexto: reportes, catálogos, analíticas? Comparte tu caso y dudas en los comentarios.