vlambda博客
学习文章列表

CQRS不等同于读写分离

读写分离强调的是物理数据库的分离

典型的读写分离,比如通过数据库的主从实现读写分离。主库承担所有的写入请求,从库分担读请求。这种数据库(或再抽象一层,数据存储层)的读写分离本质上是一种数据冗余机制,主从的数据模型一致,从库数据依赖于主数据的同步。读写分离能够实现读库的独立伸缩,极大均衡系统的读负载,提高系统读性能。


CQRS关注点是命令(Command)与和查询(Query)的职责分离


CQRS模式下,对命令端和查询端是否建立不同的底层数据模型没有强制要求。但是,对于多端且复杂的查询需求,针对命令和查询建立不同的模式会带来诸多优势。一般情况下,命令侧的数据模型更强调范式化和完整性约束。查询的模型更强调性能和业务定制性,可以对不同业务的查询要求进行灵活设计。例如,相比于命令侧的数据模型,查询侧的数据模型可以进行合理的冗余设计、降低对范式的约束,甚至使用不同的数据库或其他存储技术。命令和查询两侧的数据模型如果是分离的,则我们必须要考虑如何将命令侧的数据实时或近实时同步到查询侧,当然,是否进行分离设计,还要考虑业务中是否可以接受数据同步的延时,以及系统能够接受的不一致时间有多大。