【问题标题】:Scaling out, Multiple Read Databases with a CQRSish Pattern使用 CQRSish 模式扩展多读取数据库
【发布时间】:2011-07-18 19:06:54
【问题描述】:
我正在使用 CQRS 样式模式(无事件源)我只是将我的读取和写入分成 2 个单独的应用程序边界。
目前,该应用程序适用于一个 SQL 2008 数据库。我想添加多个读取数据库来分配工作量,因为容量开始变高。
我需要 SQL 2008 中的解决方案,我可以在其中更新单个数据库,并将更改实时复制/传播到其他节点。这只需要单向传播,因为应用程序只会写入单个“主”数据库。
我已阅读有关点对点事务复制的信息。有人用过,更新子节点有多少延迟?
还有其他解决方案吗?
【问题讨论】:
标签:
c#
sql-server-2008
scalability
cqrs
【解决方案1】:
如果您没有在域/命令端使用事件溯源,那很好。但这并不一定会阻止您将读取端的所有事件存储在某种“事件”表中。这样做时,它允许您销毁视图模型表并从存储在读取模型数据库的“事件”表中的所有事件中重建。
这样做的原因是为了扩展您的读取端。由于您现有的读取数据库受到压力并且无法再维持负载,而不是尝试从主“读取数据库”复制 - 只需在其他一些硬件上创建另一个数据库实例,该实例会从“事件”表中填充自身。然后让这个额外的读取数据库订阅您的域生成的事件。 (一旦您了解发生了什么,您实际上会想先订阅然后填充表格,这样您就不会错过已发布的事件)
这允许您拥有两个同级但互不通信的读取数据库。他们只是监听来自域的事件,更新读取的模型表,并将接收到的事件添加到某种本地“事件”表中。