2012-05-04 110 views
1

我擁有的站點有一個簡單的CQRS體系結構,運行良好。一個事件由不同的訂閱者發佈並提取,其中一個使得報告數據庫保持同步[在RavenDb中]。重新生成查詢數據庫

舉例來說,我的報告數據庫已損壞/丟失。通過事件採購,我可以重播事件並重建報告數據庫,但是[目前]我沒有使用事件採購;我有一個簡單的nHibernate持久性關係存儲。解決方案是創建一個「再生」類型的腳本,它基本上會發送基於關係存儲的所有事件(例如,PersonCreatedEvent後跟30xPersonLikedBlogPostEvent等)?它本質上與事件源做同樣的事情,但事件是從關係模型推斷出來的。

作爲可維護性和災難恢復的難易顯然很重要。

回答

0

您不需要實施全面的事件採購解決方案來實現這一目標。如果您只將所有事件存儲在事件日誌中,則可以根據需要檢索並重播它們。

1

如果您不存儲事件,則無法進行再生。如果您使用關係商店生成「已創建」事件,則無法從此「再生」中獲得任何好處。

+0

謝謝,我不是太大驚小怪從/真對象歷史等表示再生的優點,但有一個RavenDb報告數據庫是性能SLA的網站的重要。然而,我正在轉向事件採購。問候 – sjhuk

0

我不認爲有一個簡單/快速的解決方案。實際上,如果您將數據從關係數據遷移到事件源,則需要執行此操作。正如你所說的,你唯一能做的就是讓每個實體以合理順序編寫事件(即CreatedEvent然後你的其他狀態改變事件)。但是當你捕獲這些事件時,我會把它們存儲起來,以便將來可以重新運行它們。

0

如果您存儲的所有發送到服務器(在日誌,例如),您可以發送所有的命令到總線從最初的命令,直到最後一個出發,可以再現所有查詢側的命令。這是命令採購。 用Command採購,你可以輕鬆地去採購活動時,你覺得準備好了。