CQRS : Command Query Responsibility Segregation
命令查询分离模式,指将对数据库的增删改操作和查询操作分离,后续可针对查询类业务和命令类业务分开处理分开优化
分离可以在上层进行,底层仍然共享表也是可以的。
另外也可以创建数据宽表来适应查询的业务。
分离后的数据可以存在不同的数据库中,查询的数据由命令模式同步过来。
对查询有性能要求的场景可以将数据存入缓存或是mongodb等nosql数据库。
在此基础上可以使用事件溯源模式对操作进行统一管理,有了溯源就可以对事件进行重放,出现异常的时候也能够更好的排查问题。
分离以后推荐使用mq对命令事件进行发布,并需要同时完成对失败和重复的消息进行处理,这样整个流程才算完整。
建议需要对读写分离时考虑使用CQRS,或是在团队进行拆分组成专门编写复杂业务写操作或高频查询时使用。
优点
- 使用此模式后可以将读写拆分开,这样在复杂查或者写的时候只需要关注尽可能少的内容。
- 读写负载可以独立缩放
- 可以针对读写操作分别进行优化
- 更易确保仅对需要更新的实体进行写操作