外观主题
阅读语言

CQRS 读写分离 —— 命令改状态,查询只读视图

软件 本站软件 4小时前
https://yxp.hk/p/HO1sAr

📦 开源仓库:learn_cqrs_segregation · 纯 Python 标准库 · 学习演示项目

「读多写少」和「写多读少」的系统根本不该用同一个模型伺候。CQRS(Command Query Responsibility Segregation)把读写彻底分开:命令(Command)改状态、绝不返回数据;查询(Query)读状态、绝不改状态。写库之后把变更投影(projection)到一个为查询优化过的读视图上。

核心思路

  命令侧(写)                     查询侧(读)
  ┌──────────────────┐            ┌──────────────────┐
  │ OrderCommandSvc  │──投影──►   │ OrderQuerySvc    │
  │  create_order()  │            │  order_detail()  │
  │  pay_order()     │            │  orders_of_user()│
  └────────┬─────────┘            └────────┬─────────┘
           ▼                               ▼
      写库(规范化)                  读库(扁平化、为查询优化)
  • 读库是写库的投影,可随时重建/刷新
  • 读写可以独立扩容,甚至用不同的数据库

为什么值得学

  • 读多写少场景:读侧随便优化,不用把写逻辑搅复杂
  • 独立伸缩:读副本和写节点分开扩
  • 边界清晰:写逻辑和读形状不再互相打架

演示场景

  1. 写命令创建订单 → 写库更新,读投影同步构建
  2. 查询只从读库列出用户订单和订单详情
  3. 支付命令改状态 → 读投影立即反映 PAID

运行

python run_all.py

纯 Python 标准库,零第三方依赖,一键跑完所有演示场景后自动退出。
仓库:github.com/yxpil/learn_cqrs_segregation,欢迎 Star 与提 Issue。