【資料庫理論】 ACID和BASE的比較

renjixinchina發表於2013-05-14

傳統關係型資料庫系統的事務都有ACID的屬性,即原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation,又稱獨立性)、永續性(Durability)。英文為:

  • Atomic: Everything in a transaction succeeds or the entire transaction is rolled back.
  • Consistent: A transaction cannot leave the database in an inconsistent state.
  • Isolated: Transactions cannot interfere with each other.
  • Durable: Completed transactions persist, even when servers restart etc.
  • 中譯為:

  • 原子性: 整個事務中的所有操作,要麼全部完成,要麼全部不完成,不可能停滯在中間某個環節。事務在執行過程中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。
  • 一致性: 在事務開始之前和事務結束以後,資料庫的完整性約束沒有被破壞。
  • 隔離性: 兩個事務的執行是互不干擾的,一個事務不可能看到其他事務執行時,中間某一時刻的資料。 兩個事務不會發生互動。
  • 永續性: 在事務完成以後,該事務所對資料庫所作的更改便持久的儲存在資料庫之中,並不會被回滾。
  • 在資料庫系統中,事務的ACID屬性保證了資料庫的一致性,比如銀行系統中,轉賬就是一個事務,從原賬戶扣除金額,以及向目標賬戶新增金額,這兩個資料庫操作的總和構成一個完整的邏輯過程,不可拆分,為原子,從而保證了整個系統中的總金額沒有變化。

然而,這些ACID特性對於大型的分散式系統來說,適合高效能不相容的。比如,你在網上書店買書,任何一個人買書這個過程都會鎖住資料庫直到買書行為徹底完成(否則書本庫存數可能不一致),買書完成的那一瞬間,世界上所有的人都可以看到熟的庫存減少了一本(這也意味著兩個人不能同時買書)。這在小的網上書城也許可以執行的很好,可是對Amazon這種網上書城卻並不是很好。

而對於Amazon這種系統,他也許會用cache系統,剩餘的庫存數也許是之前幾秒甚至幾個小時前的快照,而不是實時的庫存數,這就捨棄了一致性。並且,Amazon可能也捨棄了獨立性,當只剩下最後一本書時,也許它會允許兩個人同時下單,寧願最後給那個下單成功卻沒貨的人道歉,而不是整個系統效能的下降。

其實,上面的思想是從Eric Brewer’s CAP 理論得到的啟發,在CAP理論中:

在設計分散式Web服務中,通常需要考慮三個應用的屬性:一致性、可用性以及分割槽寬容性。但是在實際的設計中,不可能這三方面同時做的很好。

由於CAP理論的存在,為了提高效能,出現了ACID的一種變種BASE:

  • Basic Availability:基本可用
  • Soft-state :軟狀態/柔性事務,可以理解為”無連線”的, 而 “Hard state” 是”面向連線”的
  • Eventual consistency:最終一致性,最終整個系統(時間和系統的要求有關)看到的資料是一致的。
  • 在BASE中,強調可用性的同時,引入了最終一致性這個概念,不像ACID,並不需要每個事務都是一致的,只需要整個系統經過一定時間後最終達到是一致的。比如Amazon的賣書系統,也許在賣的過程中,每個使用者看到的庫存數是不一樣的,但最終買完後,庫存數都為0。再比如SNS網路中,C更新狀態,A也許可以1分鐘才看到,而B甚至5分鐘後才看到,但最終大家都可以看到這個更新。

有趣的是,ACID的意思是酸,而BASE卻是鹼的意思,因此這是一個對立的東西。其實,從本質上來講,酸(ACID)強調的一致性(CAP中的C),而鹼(BASE)強調是可用性(CAP中的A)。

 

database-acid-vs-base

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15747463/viewspace-761026/,如需轉載,請註明出處,否則將追究法律責任。

相關文章