這篇文章主要講解了“3種CQRS架構(gòu)模式介紹”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“3種CQRS架構(gòu)模式介紹”吧!
創(chuàng)新互聯(lián)公司專注于衛(wèi)輝網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供衛(wèi)輝營銷型網(wǎng)站建設(shè),衛(wèi)輝網(wǎng)站制作、衛(wèi)輝網(wǎng)頁設(shè)計、衛(wèi)輝網(wǎng)站官網(wǎng)定制、小程序開發(fā)服務(wù),打造衛(wèi)輝網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供衛(wèi)輝網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
CQRS 建議將應(yīng)用程序?qū)臃譃閮蓚€方面,即命令端(Command)和查詢端(Query)。
查詢端負責優(yōu)化讀取數(shù)據(jù)。從持久化獲取數(shù)據(jù),然后將它們映射到展現(xiàn)層表單,這些表單通常被標識為數(shù)據(jù)傳輸對象(DTO)。
命令端關(guān)注優(yōu)化寫入數(shù)據(jù)。命令執(zhí)行各種用例,修改實體狀態(tài)并將其持久化。
通過分離讀寫操作,我們提高了性能,并在系統(tǒng)中支持關(guān)注點分離原則。
本文介紹 3 種主要的 CQRS 架構(gòu)實現(xiàn)。
單一數(shù)據(jù)庫CQRS 模式?jīng)]有正式名稱,Mattew Renze 在他的課程Clean Architecture 中將其命名為單一數(shù)據(jù)庫 CQRS,我也選擇這個命名。
顧名思義,雙方都在和一個數(shù)據(jù)庫對話。Command 在域中執(zhí)行用例,從而修改實體的狀態(tài),然后通過 ORM 如 Entity Framework Core 或 Hibernate 將實體保存到數(shù)據(jù)庫中。
Query 直接通過數(shù)據(jù)訪問層執(zhí)行,數(shù)據(jù)訪問層要么是使用各種 ORM,要么通過存儲過程。
在“雙數(shù)據(jù)庫”方式中,我們需要兩個數(shù)據(jù)庫,一個用于寫操作,一個用于讀操作。命令端使用針對寫操作優(yōu)化的數(shù)據(jù)庫。查詢端使用針對讀取操作優(yōu)化的數(shù)據(jù)庫。
命令每改變一個狀態(tài),修改后的數(shù)據(jù)就必須從寫數(shù)據(jù)庫推送到讀數(shù)據(jù)庫中,或者作為一個跨兩個數(shù)據(jù)庫的分布式事務(wù),或者使用最終一致性模型。
這種架構(gòu)給軟件的查詢端帶來了數(shù)量級的性能提升,這是有利的,因為一般系統(tǒng)在讀數(shù)據(jù)上花費的時間一般比寫數(shù)據(jù)要更多。
最后一種是最復(fù)雜的 CQRS 架構(gòu)。與前面兩種方式相比,事件源存儲數(shù)據(jù)的思路完全不同。
在事件源方法中,我們并不只存儲實體的當前狀態(tài),而且將實體發(fā)生的每一個狀態(tài)作為快照來存儲。實體并不是以標準化數(shù)據(jù)的形式保存,而是通過事件的時間戳來保存它們的變更。
事件源帶有以下好處:
事件存儲包括完整的審計跟蹤,可以在需要嚴格監(jiān)管的場景中派上用場。
可以在任何時間點重建任何實體的任何狀態(tài),這對于調(diào)試非常有用。
可以重放事件,查看系統(tǒng)中任何時候到底發(fā)生了什么。這個功能對于壓力測試和 bug 修復(fù)非常有用。
可以輕松地重建生產(chǎn)數(shù)據(jù)庫。
有多個為讀優(yōu)化的數(shù)據(jù)存儲。
但在另一方面,這種方式實現(xiàn)很復(fù)雜,如果你不能從其中受益,那么用這個模式可能適得其反。
感謝各位的閱讀,以上就是“3種CQRS架構(gòu)模式介紹”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對3種CQRS架構(gòu)模式介紹這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!