CQRS写数据库

时间:2018-05-29 15:43:08

标签: cqrs event-sourcing axon

在我们公司,我们正在开发基于微服务的系统,我们应用CQRS模式。在CQRS中,我们将命令和查询分开,因此我们必须开发2个微服务。目前,我被分配到增强CQRS模式以将事件保存在单独的数据库中(事件源)。我知道拥有一个单独的事件数据库非常重要,但我们真的需要一个单独的写数据库吗? Write数据库的实际用途是什么?

3 个答案:

答案 0 :(得分:2)

如果您有一个事件数据库,那么它就是您的Write数据库。它是记录系统,包含应用程序的事务一致状态。

如果你有一个单独的Read数据库,它可以以强烈一致或最终一致的方式构建在事件日志之外。

答案 1 :(得分:0)

  

我知道拥有一个单独的事件数据库非常重要,但我们真的需要一个单独的写入数据库吗? Write数据库的实际用途是什么?

写入数据库的目的是作为记录簿。写入数据库是用于在重新启动时恢复的持久表示形式。它是所有写入的同步点。

它的当前真相"因为你的系统理解它。

从某种意义上说,它是真实的"数据,其中读取的模型只是旧的/缓存的实际数据的表示形式。

根据RDBMS进行思考可能会有所帮助。当流量很小时,我们可以为来自单个数据库的所有传入请求提供服务。随着流量的增加,我们希望开始卸载部分流量。由于我们希望持久化数据处于一致状态,因此我们无法卸载写入 - 如果我们想要在写入时解决冲突,则不会。但是我们可以将读取转移到其他实例上,前提是我们要在写入发生之间以及所有系统上都有可用的写入数据时承认一些有限的时间间隔。

因此,我们将所有写入发送给领导者,负责将所有内容组织到提前写入日志中;然后可以将对日志的更改复制到其他实例,从而构建用于支持低延迟查询的数据结构的本地副本。

如果你仔细观察,你可能会注意到你的事件数据库"与#34;提前写日志"。

共享很多共同点

答案 2 :(得分:0)

不,您不一定需要单独的写入数据库。 CQRS隔离的核心是模型(代码)级别。根据具体情况,一直到数据库可能对您的项目有益或有害。

与围绕使用CQRS(事件源,命令总线等)的许多正交架构决策一样,在采用之前应仔细考虑优缺点。在一定量的并发访问之下,分离读写DB可能不值得。