亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行分庫分表中多數據源的事務處理

發布時間:2021-11-29 10:56:37 來源:億速云 閱讀:460 作者:柒染 欄目:數據庫

這期內容當中小編將會給大家帶來有關如何進行分庫分表中多數據源的事務處理,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

系統經sharding改造之后,原來單一的數據庫會演變成多個數據庫,如何確保多數據源同時操作的原子性和一致性是不得不考慮的一個問題。總體上看,目前對于一個分布式系統的事務處理有三種方式:分布式事務、基于Best  Efforts 1PC模式的事務以及事務補償機制。我們下面對這三種處理方式一一進行分析。

分布式事務

這是最為人們所熟知的多數據源事務處理機制。本文并不打算對分布式事務做過多介紹,讀者可參考此文:關于分布式事務、兩階段提交、一階段提交、Best  Efforts 1PC模式和事務補償機制的研究 。在這里只想對分布式事務的利弊作一下分析。

優勢:

1. 基于兩階段提交,最大限度地保證了跨數據庫操作的“原子性”,是分布式系統下最嚴格的事務實現方式。

2.  實現簡單,工作量小。由于多數應用服務器以及一些獨立的分布式事務協調器做了大量的封裝工作,使得項目中引入分布式事務的難度和工作量基本上可以忽略不計。

劣勢:

系統“水平”伸縮的死敵。基于兩階段提交的分布式事務在提交事務時需要在多個節點之間進行協調,***限度地推后了提交事務的時間點,客觀上延長了事務的執行時間,這會導致事務在訪問共享資源時發生沖突和死鎖的概率增高,隨著數據庫節點的增多,這種趨勢會越來越嚴重,從而成為系統在數據庫層面上水平伸縮的”枷鎖”,  這是很多Sharding系統不采用分布式事務的主要原因。

基于Best Efforts 1PC模式的事務

與分布式事務采用的兩階段提交不同,Best Efforts  1PC模式采用的是一階段端提交,犧牲了事務在某些特殊情況(當機、網絡中斷等)下的安全性,卻獲得了良好的性能,特別是消除了對水平伸縮的桎酷。Distributed  transactions in Spring, with and without XA一文對Best Efforts  1PC模式進行了詳細的說明,該文提供的Demo代碼更是直接給出了在Spring環境下實現一階段提交的多數據源事務管理示例。不過需要注意的是,原示例是基于spring  3.0之前的版本,如果你使用spring 3.0+,會得到如下錯誤:java.lang.IllegalStateException: Cannot  activate transaction synchronization – already active,如果使用spring  3.0+,你需要參考spring-data-neo4j的實現。鑒于Best Efforts  1PC模式的性能優勢,以及相對簡單的實現方式,它被大多數的sharding框架和項目采用。

事務補償機制

對于那些對性能要求很高,但對一致性要求并不高的系統,往往并不苛求系統的實時一致性,只要在一個允許的時間周期內達到最終一致性即可,這使得事務補償機制成為一種可行的方案。事務補償機制最初被提出是在“長事務”的處理中,但是對于分布式系統確保一致性也有很好的參考意義。籠統地講,與事務在執行中發生錯誤后立即回滾的方式不同,事務補償是一種事后檢查并補救的措施,它只期望在一個容許時間周期內得到最終一致的結果就可以了。事務補償的實現與系統業務緊密相關,并沒有一種標準的處理方式。一些常見的實現方式有:對數據進行對帳檢查;基于日志進行比對;定期同標準數據來源進行同步,等等。

分布式事務,最嚴格的事務實現,但性能是個大問題;Best Efforts  1PC模式,性能與事務可靠性的平衡,支持系統水平伸縮,大多數情況下是最合適的選擇;事務補償機制,只能適用于對事務性要求不高,允許數據“最終一致”即可的系統,犧牲實時一致性,獲得最大的性能回報。

上述就是小編為大家分享的如何進行分庫分表中多數據源的事務處理了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

黄大仙区| 宜良县| 错那县| 阿荣旗| 章丘市| 来宾市| 嘉鱼县| 南雄市| 繁昌县| 广宗县| 横山县| 沂南县| 元氏县| 衡东县| 凤冈县| 二连浩特市| 昆明市| 三原县| 海林市| 滕州市| 高青县| 武胜县| 河东区| 陕西省| 子洲县| 云阳县| 怀仁县| 隆林| 蓬安县| 嵩明县| 南乐县| 广水市| 吉安市| 金平| 宣汉县| 胶州市| 新竹市| 林州市| 育儿| 延安市| 集安市|