扩展性,使用CQRSish模式的多读数据库

5

我正在使用CQRS模式(不使用事件溯源),将读写操作分为两个独立的应用程序边界。

目前,该应用程序针对一个SQL 2008数据库工作。由于数据量开始增加,我想添加多个只读数据库以分散工作负载。

我需要在SQL 2008中找到一种解决方案,可以更新单个数据库,并实时将更改复制/传播到其他节点。这只需要是单向传播,因为该应用程序只会写入单个“主”数据库。

我已经了解了点对点事务复制。有使用过的人吗?更新子节点有多少延迟?

还有其他解决方案吗?

1个回答

3
如果你在领域/命令方面没有使用事件溯源,那也没关系。但这并不应该阻止你将所有事件存储在某种“事件”表中的读取侧。通过这样做,可以允许您销毁视图模型表,并从存储在读取模型数据库中的所有事件重新构建。

这样做的原因是为了扩展你的读取侧。当现有的读取数据库承受不住负载压力时,而不是尝试从主“读取数据库”进行复制,只需在其他硬件上创建另一个数据库实例,该实例从“事件”表中填充自身。然后,让此附加读取数据库订阅由您的领域生成的事件。(一旦您理解发生的情况,您实际上会想先订阅,然后再填充表格,以便不会错过已发布的事件)

这使您可以拥有两个读取数据库,它们是兄弟关系,但彼此不交流。它们简单地监听来自领域的事件,更新读取模型表,并将接收到的事件添加到某种本地“事件”表中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接