我看過並閱讀了一些關於CQRS的教程,但他們都沒有使用現實世界的例子,所有這些(使事情很簡單)只有一個內存事件存儲 而在這個例子中,獲取對象的當前狀態以「重放」事件很容易且快速。例如與SQL數據庫。 比方說,我有一個用戶的系統。CQRS,仍然沒有完全得到它,什麼是保存在數據庫中;(
而且我有UI在那裏我可以添加和編輯的用戶,還能得到所有用戶的列表。
現在,根據教程的說法,我將事件保存在數據庫中,假設每個用戶在他們的個人資料上有3個變化,並且我們有100.000個用戶。
現在我有一個GetById回購。 在一個正常的非CQRS系統中,我根據Id獲得一個記錄。 快速和小的資源使用情況。
但是現在在CQRS系統上,我必須從數據庫加載3條記錄,並將它們應用到新的用戶對象上,並返回這個......這不是那種性能,但是我可以說:「也許生活在這裏,因爲伐木的好處等等。「
但是,我如何在一個頁面上顯示50個用戶的列表用戶場景。 50倍x 3條記錄,每頁點擊此? 而這不僅對於客戶,可能是發票,預訂等等,這是什麼資源浪費?
對於CQRS/EventSourcing,我會得到一些完全錯誤的東西嗎?或者我有這個drawbag的生活嗎?
親切的問候
我知道CQRS是關於分離讀寫的,這是它的重要部分。但之後的一切對我來說都不清楚。 一個微小的現實世界的例子會很棒。 UserAggregat中的UpdateUserCommand觸發事件UserUpdatedEvent,該事件將被序列化存儲在事件SQL表中。 我也得到了這部分。這是寫入方面。 但是,我該如何處理Read方法,是否存在User表,或者沒有(僅限事件表),如果有的話,該命令是否不僅插入到事件表中,還會更新用戶表中的用戶?讀取只與用戶表一起工作? – SharpNoiZy
從MS的樣本看它涵蓋了所有這些。可能有一個或多個用戶表被設計爲顯示需要的信息。該事件可以由一個或多個更新其他視圖的處理器來處理。這些視圖通常非常簡單,並且可以通過再次通過處理器運行事件來丟棄數據並重建視圖 – GraemeMiller