CQRS vs CRUD

CQRS vs CRUD关于一些名词CQRSEventSourcingpatternMaterializedViewpattern一、CRUD有什么不好的地方我们一般的开发是增删改查,写在一个项目里,写一个Model,也就是entity,里面有各种表的field,查和改的时候我们一般用同一个model,框架可能用hibernate,mybatis等。但是同一个Model,可能会造成一些问题,比如你插入的数据,和你…

关于一些名词

CQRS

Event Sourcing pattern

Materialized View pattern

一、CRUD有什么不好的地方

我们一般的开发是增删改查,写在一个项目里,写一个Model,也就是entity,里面有各种表的field,查和改的时候我们一般用同一个model,框架可能用hibernate,mybatis等。

但是同一个Model,可能会造成一些问题,比如你插入的数据,和你要查询的数据不匹配,比如查的数据用不着那么多列,这就造成了我们更新或者查询了一些额外的数据,造成性能的问题。

当然你可以说,我不同的更新或者查询创建不同的Model,来减少额外的查询。

但是还有个问题,当并发量多的时候,各种更新、查询都在这数据库里,会造成一些锁,性能上的影响,对数据库层是压力

还有一个是写的sql越来越复杂,表越来越多,级联越来越多,相信很多人会有同样的体会。

二、CQRS

这个时候就可以用CQRS了,简单的说就是数据的更新和查询用不同的接口。这里你可以理解为用不同的项目,查询我写在查询项目里,更新我写在更新的项目里。有同学会问,那我更新项目的时候如果想查询一些值呢?比如查询用户密码?

对了这时候就涉及到服务之间的调用了。现在你可以把查询、更新项目理解为两个服务,提供不同的角色、服务,也就是提供不同的接口,先不要想具体实现。

当然了,既然项目都拆开了,为了优化性能,我们可以吧数据库分开,一个用来写、一个用来查。

三、更新数据库的性能问题和数据不一致

虽然读写我们拆开了,但是写也会有各种性能问题,

但是这有产生出另一个问题,数据不一致性。

比如你更新了一个数据,而另一个数据库没有更新,可能有些地方出了问题。

这个时候我们就要用到event sourcing了,他可以把每个动作先保留下来,然后一个一个执行,这样并发问题解决了,而且保留的动作我们还可以让他去更新读数据库,来避免数据不一致。

具体的介绍可以看看这些

概念介绍

https://docs.microsoft.com/en-us/azure/architecture/patterns/cqrs

https://docs.microsoft.com/en-us/azure/architecture/patterns/event-sourcing

https://docs.microsoft.com/en-us/azure/architecture/patterns/materialized-view

相关框架

https://doc.akka.io/docs/akka/2.5.4/scala/persistence.html

http://eventuate.io/docs/concepts.html

https://eventstore.org/

event sourcing框架比较

https://stackoverflow.com/questions/19467084/eventstore-vs-mongodb/25171917#25171917

cqrs推荐的一些技术框架

https://stackoverflow.com/questions/17708489/using-kafka-as-a-cqrs-eventstore-good-idea/47370656#47370656

今天的文章CQRS vs CRUD分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/9089.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注