比較ACID和BASE——兩種可靠的數據庫事務方法

      網友投稿 2190 2025-04-01

      兼顧性能和一致性的事務控制在分布式計算環境下是很重要的。通常會在兩種事務控制模型中選擇其一使用:ACID用于RDBMS,base用在很多NoSQL系統。即使數據庫事務只有很少一部分需要事務完整性,但了解RDBMS和NoSQL系統能夠采用這些事務控制策略也是很重要的。這兩種模型的區別在于應用開發人員所付出的努力和事務控制所發生的位置(層級)。


      讓我們從一個簡單的銀行業務案例來展現一個可靠的事務。如今,許多人都有兩個銀行賬戶:儲蓄賬戶和支票賬戶。如果你想將一些資金從一個賬戶轉賬到另一個賬戶,銀行在網站上會有轉賬頁面,進行如圖1所示的一個資金轉賬流程。

      圖1這一系列原子步驟將資金從一個賬戶轉賬到另一個賬戶。第一步從儲蓄賬戶扣除所要轉賬的金額。第二步將相等的轉賬金額增加到支票賬戶。由于事務應該是可靠的,所以所有步驟要么都執行要么都不執行。在事務步驟之間,任何顯示賬戶總額由于交易金額而減少的報表都不應該被允許運行

      當點擊了網頁上的轉賬按鈕,兩個獨立的操作必須共同執行。首先從儲蓄賬戶中扣除轉賬金額,然后再加到支票賬戶中。事務管理是確保這兩個操作作為一個整體一起發生或者一起不發生的過程。如果計算機在第一個步驟完成后而第二個步驟還沒開始時崩潰了,你要損失1 000美元,你當然會對銀行產生極大不滿。

      傳統的商業數據庫都以在金融事務方面的穩定和可靠而聞名。這不僅因為它們已經存在了相當長的時間,且一直不斷地進行著優化,還因為它使得程序員通過在事務開始和結束的地方進行聲明就可以很容易地保障關鍵事務的可靠性。這些聲明被稱作啟動事務(OPEN TRANSACTION)和結束事務(END TRANSACTION)。通過添加它們,開發者能夠獲得高可靠的事務支持。如果兩個原子操作中的一個沒有完成,那么所有操作都會被回滾至它們最初的狀態。

      系統同樣確保了不會有任何賬戶報表在操作進行到一半時生成。如果你在事務過程中執行生成賬戶余額報表,它將不會顯示先有1 000數額的減少然后再增加1 000。如果報表在事務的第一個步驟進行時開始生成,它將會被阻塞,直到整個事務完成。

      在傳統的RDBMS中,事務管理的復雜性由數據庫層負責解決。應用開發者只需要處理在整個事務失敗時,如何通知正確的組件或者不停重試直到事務完成。應用開發者并不需要知道如何撤銷一個事務的各種部分,因為這已經成為了數據庫內建的一部分。

      由于可靠的事務對于大多數應用系統是很重要的,接下來將深入研究RDBMS的事務控制——ACID和NoSQL系統的事務控制——base

      RDBMS的事務控制——ACID

      RDBMS的事務控制通過原子性、一致性、隔離性和持久性(ACID)屬性來保證事務是可靠的。接下來將對每一個屬性進行定義。

      原子性——在銀行交易的例子中,我們提到過從儲蓄賬戶到支票賬戶的現金轉移的過程要么一起發生要么都不發生。如果用技術術語來形容就是原子性,它來自于希臘語的“不可分”。如果系統聲明支持原子性事務,那么它必須考慮所有失敗的情況:磁盤故障、網絡故障、硬件故障或者單純的程序錯誤。即使是在單個CPU之上測試原子性事務也是很困難的。

      一致性——在銀行交易的例子中,我們在兩個相關賬戶之間進行資金轉移,而總賬戶余額從未改變,這是一致性的原則。那意味著數據庫不能在支票賬戶余額增加之前顯示儲蓄賬戶余額減少。數據庫負責在原子操作持續的時間內阻塞所有報表。當數據庫基于同樣的記錄同時運行很多原子性事務和報表時,會影響系統的速度。

      隔離性——隔離性指的是其他事務對該事務的每一部分的執行都不知情。例如,增加金額的事務并不知道從賬戶扣除金額的事務。

      持久性——持久性指的是這樣一個事實,一旦事務的所有方面完成,它將是永久性的。一旦轉賬的按鈕被選中,你將可以消費你的支票賬戶中的資金。如果銀行系統在那天晚上崩潰了,他們需要用備份磁帶恢復數據庫,那么必須用某些方法確保轉賬記錄也被恢復。這通常意味著銀行必須在一個獨立的計算機系統中保留一份事務日志,當備份恢復完成后,根據事務日志重新執行一遍所有事務。

      如果你認為處理這些規則的軟件一定很復雜,那么你是正確的。確實非常復雜,這也是關系型數據庫非常昂貴的原因之一。如果你自己正在編寫一個數據庫,那么有些必需的軟件模塊的數量很容易增至2倍或是3倍。這也是新數據庫產品經常在第一個發布版中不支持數據庫級別的事務管理的原因,而是在產品成熟后才會加入。

      許多RDBMS將事務發生的范圍限制在單個CPU之內。如果考慮這種情況:你的儲蓄賬戶的信息存儲在紐約的一臺計算機里,你的支票賬戶信息存儲在舊金山的一臺計算機里,那么復雜程度將會增加,因為這種情況有更多的失效點并且需要阻塞的基于這兩個系統的報表系統的數量也會增加。

      盡管支持ACID的事務很復雜,但還是有一些著名的、公認的策略來實現。它們都是基于鎖定資源,并預留出額外副本的資源,然后執行事務,如果一切都沒問題,再釋放資源。如果事務的任何一部分出錯,有爭議的資源必須回到它的初始狀態。設計上的挑戰在于搭建支持這些事務的系統,使得應用可以個更容易地使用事務并且保證數據庫的運行速度和響應能力。

      ACID系統關注數據的一致性和完整性,且高于其他考量。暫時阻塞報表的機制是為了確保系統返回可靠準確的信息的一種合理的妥協。ACID系統可以說是悲觀的,因為它們必須考慮計算環境里所有可能的失效模式。有時ACID系統似乎服從墨菲定律——會出錯的事總會出錯——并且必須仔細測試保證事務完整性。

      ACID系統高度關注數據完整性,NoSQL卻是基于BASE準則考慮一系列稍有不同的約束。如果在等待另一個事務完成前阻塞事務對你來說是不可接受的妥協,會怎么樣?如果你有一個接受客戶訂單的網站,有時ACID系統不一定是你想要的。

      非RDBMS的事務控制——BASE

      假如你的網站是運行在遍布世界各地的計算機上,會怎樣?芝加哥的計算機負責管理庫存,而負責保存產品照片的圖像數據庫在弗吉尼亞,計算稅收的程序在西雅圖運行,賬戶系統在亞特蘭大。如果一旦其中一個站點宕機會怎么樣?你是否應該告訴客戶等你在20分鐘內解決問題后再回來?除非你是想將客戶拱手相讓給競爭對手。使用ACID系統處理到達的每一個訂單現實嗎?讓我們看看另一種選擇。

      使用“購物車”和“結賬臺”概念的網站對于事務處理有不同的側重。在幾分鐘內報表不一致與無法下訂單相比是不那么重要的,因為如果阻塞一個訂單,就損失了一個客戶。這種情況下,可以使用BASE來替代ACID。下面是BASE的一些概念。

      基本可用是指允許系統暫時不一致,這樣事務就容易管理。在BASE系統中,信息和服務能力是“基本可用的”。

      軟狀態是指為了降低消耗的資源,可以暫時允許一些不準確的地方和數據的變換。

      最終一致性意味著在最后,當所有服務邏輯執行完成后,系統最后將回到一個一致的狀態。

      與RDBMS關注一致性不同,BASE系統關注可用性。BASE系統顯著的特點是它們的首要目標是要保證在短時間內,即使有不同步的風險,也要允許新數據能夠被存儲。NoSQL系統放寬了規則并允許即使不是所有數據庫都是同步的,也能運行報表。BASE系統不被認為是悲觀的,因為它們并不會關心某個過程背后的細節。它們是樂觀的,因為它們假設最后所有系統都會同步而變得一致。

      BASE系統傾向于更加簡單和迅速,因為它們不必編寫處理鎖定和釋放資源的代碼。它們的任務是保證流程運轉并稍后處理出錯的部分。BASE系統非常適合支持網上商店,填滿購物車和下訂單才是它們的主要優先功能。

      在NoSQL運動之前,大多數數據庫專家認為ACID系統是唯一能夠商用的事務類型。NoSQL系統是高度去中心化的,并且ACID提供的保障有時不是必須的,所以NoSQL采用了BASE和一些更為寬松的方法。圖2顯示了一個準確的、有點幽默的ACID和BASE哲學之間的對比。

      圖2ACID與BASE——了解其中的利弊。該圖比較了應用于嚴格的金融賬戶規則的傳統RDBMS的ACID事務與NoSQL系統更加寬松的BASE方法。當要求所有報表必須始終保持一致性和可信性,RDBMS ACID系統是理想的選擇。當把永遠不阻塞寫事務作為高優先級任務時,NoSQLBASE系統是合適的選擇。業務需求將決定是傳統的RDBMS還是NoSQL系統適合你的應用

      最后還要提醒讀者:ACID和BASE并沒有一個嚴格界限,它們取決與組織和系統決定在哪里和如何架構這個系統的場景。它們可能允許在某些關鍵領域采取嚴格的ACID事務,其他領域標準稍微放松一些。一些數據庫系統通過改變配置文件或者使用不同的API提供了雙重選擇。系統管理員和應用開發者可以一起在考慮了業務的需要之后,實現正確的選項。

      本文節選自《解讀NoSQL》

      比較ACID和BASE——兩種可靠的數據庫事務方法

      內容簡介

      本書從NoSQL的相關理論開始,深入淺出地探討了NoSQL最核心的架構模式、解決方案和一些高級主題,內容循序漸進,從理論回歸于實踐。

      全書分為4個部分。第一部分介紹NoSQL的相關理論,如CAP理論、BASE理論、一致性散列算法等;第二部分介紹NoSQL最核心的架構模式——鍵值存儲、圖存儲、列族存儲、文檔存儲;第三部分展現一些常用的NoSQL解決方案,如HA、全文搜索等;第四部分討論NoSQL的一些高級主題,如函數式編程。

      全書理論與實踐并重,每章后面還有通俗的案例。對于NoSQL的初學者來說,不失為一本了解NoSQL技術全貌的優秀讀物。

      本文轉載自異步社區。

      數據庫

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:微軟推出iPhone版Office:限制部分功能(蘋果支持office嗎)
      下一篇:Go語言實戰筆記(三) | Go Doc 文檔
      相關文章
      亚洲熟妇无码爱v在线观看| 久久香蕉国产线看观看亚洲片| 亚洲无成人网77777| 亚洲AV午夜福利精品一区二区 | 亚洲一区动漫卡通在线播放| 91亚洲va在线天线va天堂va国产| 亚洲AV永久无码精品水牛影视| 亚洲乳大丰满中文字幕| 国产成人麻豆亚洲综合无码精品| 亚洲国产精品视频| 亚洲免费日韩无码系列| 亚洲无码日韩精品第一页| 亚洲最大av无码网址| 综合久久久久久中文字幕亚洲国产国产综合一区首 | jlzzjlzz亚洲jzjzjz| 亚洲AV综合色区无码二区爱AV| 亚洲国产成人资源在线软件| 亚洲人成影院午夜网站| 亚洲一区二区三区亚瑟| 亚洲人成图片网站| 亚洲日韩精品国产一区二区三区| 亚洲精品无码成人片久久不卡| 国产精品亚洲一区二区在线观看| 最新亚洲人成无码网站| 亚洲国产婷婷综合在线精品| 亚洲日本一区二区一本一道| 久久亚洲中文字幕精品一区四| 亚洲精品无码精品mV在线观看| 亚洲成A人片在线观看无码不卡 | 亚洲中文字幕无码日韩| 亚洲VA中文字幕无码一二三区| 亚洲an天堂an在线观看| 亚洲理论在线观看| 亚洲最大的成人网| 婷婷综合缴情亚洲狠狠尤物| 爱情岛论坛网亚洲品质自拍| 亚洲成在人线av| 亚洲日本在线免费观看| 中文日韩亚洲欧美制服| 国产成人不卡亚洲精品91| 亚洲人成网站在线播放vr|