讓我首先說,我沒有CQRS的實際經驗,這就是這個問題的基礎。CQRS和事件源與關係數據庫設計結合
背景: 我建立一個系統,一個新的關鍵要求是允許管理員爲「回放」用戶操作(管理員希望能夠步每一個發生在一個系統中任何特定點的動作) 。需要注意的是,該公司已經有了從當前SQL數據庫生成的報表,它們不會更改(至少不會與此新需求並行),因此記錄的存儲將是SQL。我無法訪問SQL的更改數據捕獲,因此創建一大堆帶觸發器的歷史記錄表將非常難以維護,所以我想盡可能避免這種情況。最後,目前可能(目前還沒有)很多數據入口點會經過版本生命週期,導致SQL db的更改(添加/刪除字段),所以如果我試圖在SQL中實現更改跟蹤,我會必須維護處理舊版本數據的表格(噩夢)。
潛在的解決方案 我正在考慮使用的NoSQL(天青DocumentDB)來處理數據存儲(寫入),然後有命令處理程序處理更新當前SQL(Azure的SQL)的有關數據進行查詢(讀取) 。通過這種方式創建了審計跟蹤,並且可以處理「回放」的想法,同時不會干擾當前提供的後端功能。
這種方法將滿足要求並滿足注意事項。我不會爲整個應用程序使用CQRS,只是爲了我需要這種「回放」功能的部分。我知道我必須緩解客戶端的故障點 - >寫入DocumentDB - >用成功/失敗響應用戶 - >寫入成功的SQL寫入DocumentDB路徑,但我的新手CQRS的眼睛看不到原因爲什麼這不是一個很好的方法來處理這個問題。
任何意見將不勝感激。
[Change Feed](https://docs.microsoft.com/en-us/azure/documentdb/documentdb-change-feed)是否允許您偵聽更改並將其應用於SQL數據庫? –
更改Feed似乎正是我正在尋找的。我認爲Dogu的回答更徹底地充實了可以解決我的問題的架構。我將使用ChangeFeed作爲「消息隊列」和一個監視該隊列並相應地處理事務的輔助角色。 – JakeHova