1. 程式人生 > 實用技巧 >關於ACID理論和CAP理論

關於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(分割槽容錯性):

在大規模分散式資料系統中,網路分割槽現象,即分割槽間的機器無法進行網路通訊的情況是必然發生的,所以系統應該能夠在這種情況下仍然繼續工作。



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




轉載於:https://blog.51cto.com/berniem2m/1869735