使用CQRSish模式扩展多个读取数据库

时间:2011-03-19 15:41:23

标签: c# sql-server-2008 scalability cqrs

我正在使用CQRS样式模式(无事件源)我只是将读取和写入分成两个独立的应用程序边界。

目前,该应用程序针对一个SQL 2008数据库工作。我希望添加多个读取数据库来分配工作负载,因为卷开始变高。

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

我已阅读有关点对点事务复制的内容。任何使用过它的人,更新子节点有多少延迟?

还有其他解决方案吗?

1 个答案:

答案 0 :(得分:3)

如果您没有在域/命令端使用事件源,那很好。但这不一定会阻止您在某些“事件”表中将所有事件存储在读取端。在此过程中,它允许您销毁视图模型表并从存储在读取模型数据库中的“事件”表中的所有事件进行重建。

这样做的原因是扩大你的阅读方面。由于您现有的读取DB受到压力并且无法再承受负载,而不是尝试从主“读取数据库”复制 - 在“事件”表中填充自己的其他硬件上简单地创建另一个数据库实例。然后让这个额外的读取数据库订阅您的域生成的事件。 (一旦你理解了发生了什么,你实际上想要先订阅然后填充表格,这样你就不会错过已发布的事件)

这允许您有两个读取数据库,这些数据库是兄弟姐妹但不相互通信。他们只是从域中侦听事件,更新读取的模型表,并将收到的事件添加到某种本地“事件”表中。