關於ACID理論和CAP理論

  參加某浪微博的校園招聘,由於自己不是很專注數據庫方面的被問到這些,結果將CAP中的一致性和ACID中的一致性弄混淆了,特此總結下


事務(Transaction):

  事務(Transaction)是併發控制的單位,是用戶定義的一個操作序列。這些操作要麼都做,要麼都不做,是一個不可分割的工作單位。在關係數據庫中,一個事務可以是一條SQL語句,一組SQL語句或整個程序。當對多個表進行更新的時候,某條執行失敗。爲了保持數據的完整性,需要使用事務回滾。



ACID:RDBMS中的四個要素

   ACID是隻指數據庫中事務正確執行的四個要素的縮小,包含原子性(Atomicity),一致性(Consistency),隔離性(Isolation),持久性(Durability)。一個支持事務(Transaction)的數據庫必須,必須滿足這四個特性,否則在事務過程(Transaction Processing)中無法保證數據的正確性

原子性(Atomicity):

  整個事務中的所有操作,要麼全部完成,要麼全部不完成,不可能停滯在中間某個階段,事務執行過程中如果發生錯誤的話,會被會滾(Rollback)到事務開始之前的狀態,就像這個事務從來沒有執行過一樣。

例子:

   A給B轉賬100元

wKioL1gcU12h0-O6AABCK0VokpA197.png-wh_50

一致性(Consistency):

   在事務開始之前和事務結束之後,數據庫的完整性約束沒有被破壞。

隔離性(Isolation):

   隔離狀態執行事務,使他們好像是系統在給定的時間內執行的唯一操作。如果有兩個事務,運行在相同的時間內,執行相同的功能,事務的隔離性將確保每一事務在系統中認爲只有該事務在使用系統。這種屬性有時成爲成爲串行化,爲了防止事務操作間的混淆,必須串行化或者序列化請求,使得在同一時間僅有一個請求用於同一數據。

持久性(Durability):

   在事務完成以後,該事務對數據庫的操作便持久性的保持在數據庫中,並不會回滾。



       事務的(ACID)特性是由關係數據庫管理系統(RDBMS,數據庫系統)來實現的。數據庫管理系統採用日誌來保證事務的原子性、一致性和持久性。日誌記錄了事務對數據庫所做的更新,如果某個事務在執行過程中發生錯誤,就可以根據日誌,撤銷事務對數據庫已做的更新,使數據庫退回到執行事務前的初始狀態。

  數據庫管理系統採用鎖機制來實現事務的隔離性。當多個事務同時更新數據庫中相同的數據時,只允許持有鎖的事務能更新該數據,其他事務必須等待,直到前一個事務釋放了鎖,其他事務纔有機會更新該數據


 目前主要有兩種方式實現ACID:第一種是Write ahead logging,也就是日誌式的方式。第二種是Shadow paging


CAP定理:

      CAP定理又稱CAP原則,指的是在一個分佈式系統中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分區容錯性),三者不可得兼。CAP定理明確了分佈式系統所能實現系統的侷限性,目前互聯網中的很多分佈式系統是基於首要滿足可用性和分區容忍性而設計的。

      同時CAP原則是NoSQL數據庫的基石,是NoSQL的理論基礎。

wKioL1gcWwbRAj8_AAKVHHJHG7Y139.png-wh_50

wKioL1gcWzugAD0MAAGdtqDFBiY847.png

 Consistency(一致性):

        即數據一致性,簡單的說,就是數據複製到了N臺機器,如果有更新,要N機器的數據是一起更新的。 

 Availability(可用性):

       每個請求都能接受到一個響應,無論響應成功或失敗

Partition tolerance(分區容錯性):

      在大規模分佈式數據系統中,網絡分區現象,即分區間的機器無法進行網絡通信的情況是必然發生的,所以系統應該能夠在這種情況下仍然繼續工作。



      在一系列的研究結果裏發現,在較大型的分佈式系統中,由於網絡分隔,一致性與可用性不能同時滿足,這意味着這三個要素只能同時實現兩個,不可能三者兼顧;放寬一致性的要求會提升系統的可用性,提升一致性意味着系統需要犧牲一定的可用性。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章