2011-03-19 51 views
5

我正在使用CQRS樣式模式(無事件源)我簡單地將我的讀取和寫入分爲2個獨立的應用程序邊界。使用CQRSish模式縮放多個讀取數據庫

現在,該應用程序針對一個SQL 2008數據庫工作。我想添加多個讀取數據庫來分配工作量,因爲捲開始變得很高。

我需要SQL 2008中的解決方案,我可以更新單個數據庫,並將更改實時複製/傳播到其他節點。這隻需要單向傳播,因爲應用程序只能寫入單個「主」數據庫。

我已閱讀關於點對點事務複製。任何使用過的人,在更新子節點時有多少延遲?

其他解決方案?

回答

3

如果您沒有在域/命令端使用事件源,那很好。但是,這並不一定會阻止你在某些「事件」表中將所有事件存儲在讀取端。在此過程中,它允許您銷燬視圖模型表,並從讀取模型數據庫中的「events」表中存儲的所有事件進行重建。

這樣做的原因是擴大您的閱讀面。由於您現有的讀取數據庫受到壓力,無法再承受負載,而不是試圖從主數據庫讀取數據庫 - 只需在其他硬件上創建另一個數據庫實例,該實例從「事件」表中自行填充。然後讓這個額外的讀取數據庫訂閱您的域生成的事件。 (一旦你明白髮生了什麼,你實際上首先需要訂閱,然後填充表格,這樣你就不會錯過發佈的事件)

這可以讓你有兩個讀取數據庫是兄弟姐妹,互相交談。他們只需監聽來自域的事件,更新讀取的模型表,並將收到的事件添加到某種本地「事件」表中。