CQRS
Patrón que separa las operaciones de lectura y escritura en modelos distintos, optimizando cada uno independientemente para rendimiento y escalabilidad.
¿Qué es?
CQRS (Command Query Responsibility Segregation) separa las operaciones de escritura (commands) de las de lectura (queries) en modelos diferentes. Cada lado puede usar su propia base de datos, schema y estrategia de escalado.
¿Por qué separar?
- Las lecturas y escrituras tienen patrones de acceso diferentes
- Las lecturas suelen ser más frecuentes (10:1 o más)
- Cada lado puede escalar independientemente
- Los modelos de lectura pueden estar desnormalizados para velocidad
Flujo típico
Command → Write Model → Event → Read Model (projection)
Query → Read Model → Response
CQRS + Event Sourcing
CQRS se combina frecuentemente con event sourcing: los commands generan eventos, y las proyecciones de lectura se construyen a partir de esos eventos.
Cuándo usar
- Patrones de lectura/escritura muy diferentes
- Necesidad de múltiples vistas de los mismos datos
- Sistemas con alta carga de lectura
Cuándo NO usar
- CRUD simple
- Consistencia inmediata requerida
- Equipo sin experiencia en sistemas distribuidos
¿Por qué importa?
CQRS permite optimizar lecturas y escrituras de forma independiente, lo cual es esencial en sistemas donde los patrones de consulta difieren radicalmente de los de escritura. Combinado con event sourcing, habilita auditoría completa y proyecciones especializadas.
Referencias
- CQRS — Martin Fowler.
- CQRS Pattern — Azure — Microsoft, 2024. Guía de implementación del patrón.
- CQRS Pattern — Event Store — Event Store, 2024. CQRS con event sourcing.