2011-03-19 52 views
5

我正在使用CQRS样式模式(无事件源)我简单地将我的读取和写入分为2个独立的应用程序边界。使用CQRSish模式缩放多个读取数据库

现在,该应用程序针对一个SQL 2008数据库工作。我想添加多个读取数据库来分配工作量,因为卷开始变得很高。

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

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

其他解决方案?

回答

3

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

这样做的原因是扩大您的阅读面。由于您现有的读取数据库受到压力,无法再承受负载,而不是试图从主数据库读取数据库 - 只需在其他硬件上创建另一个数据库实例,该实例从“事件”表中自行填充。然后让这个额外的读取数据库订阅您的域生成的事件。 (一旦你明白发生了什么,你实际上首先需要订阅,然后填充表格,这样你就不会错过发布的事件)

这可以让你有两个读取数据库是兄弟姐妹,互相交谈。他们只需监听来自域的事件,更新读取的模型表,并将收到的事件添加到某种本地“事件”表中。