CQRS: Command Query Responsibility Segregation
把`写模型`和`读模型`分开
CQRS = 把写模型和读模型分开
CQRS 的本质不是
读写分库,而是承认读和写的建模目标不同,所以分别建模;读侧是写侧事实的派生视图。
写优化表示负责:接收命令、校验业务规则、维护领域状态
读优化表示负责:面向查询、报表、页面展示、搜索条件,提前组织好数据
读模型不是主数据源,而是从写模型/事件/变更日志派生出来的投影
写模型 / 事实源
↓ 事件 / CDC / 日志
读模型 / 投影 / 索引 / 宽表 / 缓存
↓
查询 API / 页面 / 报表
写模型关注:
- 业务行为是否合法
- 状态转换是否正确
- 不变量是否被保护
- 事务边界在哪里
读模型关注:
- 查得快不快
- 页面是否好展示
- 是否少 join
- 是否可以预聚合
- 是否可以缓存
评论