【しーきゅーあーるえす】
CQRS とは?
最終更新:
💡 「書くためのモデル」と「読むためのモデル」を分ける
データを変更するコマンドと、取得するクエリの責務を別々のモデルに分ける設計パターン。データベースも分ける構成はあるが、分離が必須なのは読み書きのモデルである。
📌 このページのポイント
なぜ読み書きのモデルを分けるの?
書き込みでは注文の条件や整合性を確かめ、読み取りでは一覧画面に必要な形でデータを返したい、という違いがあるからだよ。別々のモデルなら、それぞれの目的に合わせて設計できるんだ。
DBも必ず2つに分けるの?
同じDBを共有しても、読み書きのモデルを分ければCQRSにできるよ。別々のDBを使う場合は、表示向けのデータ構造や、それぞれの負荷に合わせた構成を選べる。一方で更新を反映する仕組みも必要になるね。
書いた直後に、読んだ結果へ反映されるの?
同じDBを共有するか、別DBへどう反映するかなど、構成によるよ。イベントを使って別の読み取りDBを非同期で更新する場合は、反映に遅れが出ることがある。画面が古い情報を示す場合も考えて設計しよう。
イベントソーシングも必要なの?
必須ではないよ。イベントソーシングは状態の変更をイベントの履歴として保存する方式。CQRSと組み合わせて、その履歴から表示向けの読み取りモデルを作る構成もあるんだ。
どんなシステムにも使うといいの?
まとめ:ざっくりこれだけ覚えればOK!
「CQRS」って出てきたら「読み取りと書き込みのモデルを分ける設計」と思えばだいたいOK!
📖 おまけ:英語の意味
「Command Query Responsibility Segregation」 = コマンドクエリ責務分離
💬 Command(命令=書き込み)とQuery(問い合わせ=読み取り)のResponsibility(責務)をSegregate(分離)するよ