CQRS不等同于读写分离

Posted 系统工程实验室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CQRS不等同于读写分离相关的知识,希望对你有一定的参考价值。

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

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


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


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


以上是关于CQRS不等同于读写分离的主要内容,如果未能解决你的问题,请参考以下文章

akka-typed - CQRS读写分离模式

.NET CQRS-一种读写分离的数据处理模式

CQRS读写分离MySQL数据库如何部署至Linux

从读写分离到 CQRS,张大胖是如何解决性能问题的?

从读写分离到CQRS,张大胖是如何解决性能问题的?

浅谈命令查询职责分离(CQRS)模式