Skip to content

Что такое CQRS

Коротко:

CQRS (Command Query Responsibility Segregation) — pattern, где read и write операции использую разные data models, часто разные databases. Write-side handles commands (create/update), read-side — queries. Применяется при high read-load (social feeds, analytics) или complex domain. Часто сочетается с Event Sourcing. Complexity overhead велик — не нужен для CRUD apps.

Ниже: подробности, пример, смежные термины, FAQ.

Подробности

  • Command model: strong consistency, validation, business rules
  • Query model: denormalized, optimized for specific read patterns
  • Sync между ними — через events (eventual consistency)
  • Separate scaling: read side 10× replicas, write side stays small
  • Popular frameworks: MediatR (.NET), EventStore, Axon (Java)

Пример

// Command (write)
class CreateOrderCommand { orderId, customerId, items }
// Query (read)
class OrderSummaryView { orderId, total, status }  // denormalized

Смежные термины

Больше по теме

Часто задаваемые вопросы

CQRS vs simple CRUD?

CRUD — один model для чтения и записи. CQRS — разделение, больше кода, но лучше для complex domains. Для simple apps — overkill.

Обязателен Event Sourcing?

Нет. CQRS работает и с обычной SQL. Но ES хорошо дополняет — write-side пишет events, read-side materializes views.

Как sync read model?

Async через events (Kafka, RabbitMQ). Eventual consistency — read model отстаёт на секунды-минуты.