關系型資料庫ACID理論
關系型資料庫遵循ACID規則
事務在英文中是transaction,和現實世界中的交易很類似,它有如下四個特性:
1、
A (Atomicity) 原子性
原子性很容易了解,也就是說事務裡的所有操作要麼全部做完,要麼都不失敗,事務成功的條件是事務裡的所有操作都成功,隻要有一個操作失敗,整個事務就失敗,需要復原。比如銀行轉賬,從A賬戶轉100元至B賬戶,分為兩個步驟:1)從A賬戶取100元;2)存入100元至B賬戶。這兩步要麼一起完成,要麼一起不完成,如果隻完成第一步,第二步失敗,錢會莫名其妙少了100元。
2、
C (Consistency) 一緻性
一緻性也比較容易了解,也就是說資料庫要一直處于一緻的狀态,事務的運作不會改變資料庫原本的一緻性限制。
3、
I (Isolation) 獨立性
所謂的獨立性是指并發的事務之間不會互相影響,如果一個事務要通路的資料正在被另外一個事務修改,隻要另外一個事務未送出,它所通路的資料就不受未送出事務的影響。比如現有有個交易是從A賬戶轉100元至B賬戶,在這個交易還未完成的情況下,如果此時B查詢自己的賬戶,是看不到新增加的100元的
4、
D (Durability) 持久性
持久性是指一旦事務送出後,它所做的修改将會永久的儲存在資料庫上,即使出現當機也不會丢失。
CAP理論
著名的CAP理論定義過分布式環境下二者不可兼得的關系,什麼是CAP理論呢?簡單來說CAP理論是分布式系統、特别是分布式存儲領域中被讨論的最多的理論。其中C代表
一緻性
(Consistency),A代表
可用性
(Availability),P代表
分區容錯性
(Partition tolerance)。

- 一緻性
一個寫操作傳回成功,那麼之後的讀請求都必須讀到這個新資料;如果傳回失敗,那麼所有讀操作都不能讀到這個資料。即所有的節點都能讀取最新的一份資料。
- 可用性
對資料更新具備高可用性,請求能夠及時處理,不會一直等待,即使出現節點失效。
- 分區一緻性
一般情況下,網絡不同分區伺服器都有延遲和丢包能容忍網絡分區,在網絡斷開的情況下,被分隔的節點仍能正常對外提供服務。
了解CAP理論最簡單的方式是想象兩個副本處于分區兩側,即兩個副本之間的網絡斷開,不能通信。
分布式系統的挑戰
分布式系統的挑戰
下面以一個例子來了解CAP理論
如下圖1中所示,Client A負責更新資料,為了保證Server 1和Server 2上的資料是一緻的,Client A會将X=1的寫操作同時發給Server 1和Server 2,但是當Client A和Server 2之間發生網絡分區(網絡無法連接配接)時,此時如果讓write X=1的寫操作在Server 1上成功,那Client B和Client C将從Server 1和Server 2上讀取到不一緻的X值;此時如果要保持X值的一緻性,那麼write X=1的寫操作在Server 1和Server 2上都必須失敗,這就是著名的CAP理論:在容忍網絡分區的前提下,要麼犧牲資料的一緻性,要麼犧牲寫操作的可用性。
解決這個問題你可能會想到讓Client C同時讀取Server 1和Server 2上的X值和版本資訊,然後取Server 1和Server 2最新版本的X值,如下圖2所示。但Client C和Server 1之間也可能發生網絡分區,這本質上是犧牲讀可用性換取寫可用性,并沒有突破CAP理論。
由于目前的網絡硬體肯定會出現延遲丢包等問題,是以
分區容忍性
是我們必須需要實作的。是以我們隻能在一緻性和可用性之間進行權衡,沒有NoSQL系統能同時保證這三點。
BASE理論
BASE就是為了解決noSql資料庫強一緻性引起的問題而引起的可用性降低而提出的解決方案。
BASE其實是下面三個術語的縮寫:
基本可用(Basically Available)
軟狀态(Soft state)
最終一緻(Eventually consistent)
它的思想是通過讓系統放松對某一時刻資料一緻性的要求來換取系統整體伸縮性和性能上改觀。為什麼這麼說呢,緣由就在于大型系統往往由于地域分布和極高性能的要求,不可能采用分布式事務來完成這些名額,要想獲得這些名額,我們必須采用另外一種方式來完成,這裡BASE就是解決這個問題的辦法