CQRSパターンとは?
しーきゅーあーるえすぱたーん
CQRSパターンとは、システムのデータ操作をコマンド(書き込み)とクエリ(読み取り)に明確に分離する設計パターンで、複雑なドメインや高スループットが求められるシステムで有効です。
CQRSパターン(Command Query Responsibility Segregation)とは、アプリケーションのデータモデルを「データを変更するコマンド(Command)」と「データを読み取るクエリ(Query)」に明確に分離する設計思想です。グレッグ・ヤングやウーディ・ダルが普及させた概念で、DDD(ドメイン駆動設計)やイベントソーシングと組み合わせて使われることが多いです。
従来のCRUDモデルでは、読み書きに同一のデータモデルを使います。しかし読み取りと書き込みでは要件が大きく異なることが多く、それぞれに最適化したモデルを持つことで複雑さを解消できます。
CQRSの主要な要素は次のとおりです。
- コマンドサイド:ビジネスロジックを厳格に適用してデータを変更します。結果としてイベントが発行されるケースが多いです。
- クエリサイド:非正規化されたビュー(読み取り最適化モデル)を別途持ち、高速な参照を実現します。
- 同期・非同期:コマンドの結果をイベントとして非同期にクエリサイドへ伝播させる構成がよく用いられます。
CQRSは複雑さを増す面もあるため、単純なCRUDアプリには過剰設計になりやすいです。読み取りと書き込みの負荷が大きく異なる大規模サービスや、ドメインモデルが複雑なエンタープライズシステムで真価を発揮します。EventStoreやAzure Service Busなどのミドルウェアと組み合わせて実装されることが一般的です。
使い方・例文
ECサイトで「注文を確定する(コマンド)」と「注文履歴を一覧表示する(クエリ)」を別々のサービスとモデルで実装することで、読み取り性能を独立にスケールアップできます。
この用語をシェア
最終更新: