我們目前正在評估CQRS和事件源架構。我想了解使用這種設計的維護含義是什麼。有兩個問題,我苦苦尋找的答案是這樣的:如何管理CQRS +事件源架構中的ViewModel更改
1) 如果一個應用程序已經啓動並運行了一段時間後,出現了一個新的要求,以附加字段添加到視圖模型上會發生什麼ReadModel數據庫?假設客戶郵政編碼在CustomerList ViewModel上是必需的,它以前不是。所以,額外的列可以很容易地添加到ViewModel數據庫,但是如何填充?據我所見,唯一的方法是清除讀取數據庫,並從頭開始重放所有事件以構建備份ReadModel Datbase。但是,如果應用程序已經運行好幾個月或幾年(如我們所希望的那樣)會發生什麼。這可能是數以百萬計的活動重播,只是爲了添加一個郵政編碼列的數據。
我有同樣的擔憂,如果出於某種技術原因,ReadModel數據庫得到了同步,或者我們要添加一個新的ReadModel數據庫。它看起來應用程序越舊,使用的越多,越困難也越昂貴,這是最新的readmodel返回。或者我錯過了一個訣竅?像ReadModel快照?
2) 如果在所有數百萬事件被重放以構建備份讀取數據庫之後會發生什麼情況,其中一些數據與期望的(即,看起來錯誤)不符。人們認爲,在事件存儲或反規範化例程中某處可能導致了這種錯誤(似乎如果在編碼中有一件事可以依賴,那就是錯誤)。如何去調試這個!這似乎是一個不可能的任務。或者,也許,我再次錯過了一個竅門。
我很想從誰已經運行了這樣的系統,一會兒別人聽到,維護和升級路徑是如何制定出適合您。
感謝您的任何時間和輸入。
感謝您的回覆。你對事件重播時間的看法不成問題(即使對於數百萬事件)也令人放心。我喜歡你的博客BTW,感謝分享! – James 2011-04-08 12:47:12
你肯定會想做一些測試,因爲如果你做錯了,視圖模型總體*會變得很慢。需要一點點努力才能使其變得更快。 – 2011-04-08 18:27:47
我們一直在實踐或重建我們的每一次推動生產的閱讀模型。我們首先重建數據,將其推送到我們的階段讀取模型,如果重建成功,我們將重建並將其推送到我們的生產讀取模型。對我們來說,它確保了讀取模型反映了每個版本中對事件處理程序的所有修改。 – 2011-12-06 19:19:18