1. 程式人生 > >Nosql資料庫的四大分類及分散式資料庫CAP原理

Nosql資料庫的四大分類及分散式資料庫CAP原理

1. Nosql資料庫的四大分類

2. 分散式資料庫CAP原理

2.1 關係型資料庫事務遵循的ACID規則

首先了解傳統關係型資料庫事務遵循的ACID規則:

  • 原子性(Atomicity):事務裡的所有操作要麼全部做完,要麼都不做,事務成功的條件是事務裡的所有操作都成功。
  • 一致性(Consistency):資料庫要一直處於一致的狀態,事務的執行不會改變資料庫原本的一致性約束。
  • 獨立性(Isolation):指併發的事務之間不會相互影響,一個事務要訪問的資料正在被另一個事務修改,那麼在另一個事務提交之前,看到的資料是未改變的。
  • 永續性(Durability):永續性是指事務提交後,他所做的修改將會永久的儲存在資料庫上,即使出現宕機也不會丟失。

隨著軟體行業的發展,關係型資料庫面臨如下挑戰:

  • 高併發:一個最典型的就是電商網站,例如雙11,幾億大軍的點選造成在某一時刻的併發量是很高的,傳統的關係型資料庫肯定已經是不堪重負了,如Oracle的Session數量推薦的才只有500。
  • 高效率儲存海量資料:大資料時代,資料量已經不是用GB、TB來衡量了,而是EB、ZB了,面對這海量的資料,如何高效率的儲存這些資料,關係型資料庫無法解決這個問題,以Oracle為例,單機的物理擴充套件不僅成本高,而且難度也加大了。
  • 高可用&高擴充套件:Oracle即使RAC能擴充套件數臺機器,但數量也是有限。

Nosql的出現即是為了解決這些問題了,但是儘管Nosql解決了上面問題,它並不能用來替代關係型資料庫,因為它本身也有著不可克服的缺陷。

2.2 分散式資料庫的CAP規則

CAP理論:一個分散式系統不能同時滿足一致性(Consistency)可用性(Availability)分割槽容錯性(Tolerance of network Partition)

  • 一致性:任何一個讀操作總是能讀取到之前完成的寫操作結果,也就是在分散式環境中,多點的資料是一致的。
  • 可用性:每一個操作總是能在確定的時間內返回,也不是系統隨時都是可用的。
  • 分割槽容錯性:在出現網路分割槽(如斷網)的情況下,分離的系統也能正常執行。

因此,根據 CAP 原理將 NoSQL 資料庫分成了滿足 CA 原則、滿足 CP 原則和滿足 AP 原則三大類:

  • CA  -單點叢集,滿足一致性,可用性的系統,通常在可擴充套件性上不太強大。  如:傳統Oracle資料庫
  • CP  -滿足一致性、分割槽容錯性的系統,通常效能不是特別高。                  如:大多數網站架構的選擇
  • AP  -滿足可用性、分割槽容錯性的系統,通常可能對一致性要求低一些。    如:redis、mongodb

在分散式系統中,由於分割槽容忍性是我們必須需要實現的。我們只能在一致性和可用性之間進行權衡,沒有NoSQL系統能同時保證這三點。

2.3 分散式事務的BASE特性

BASE就是為了解決關係資料庫強一致性引起的問題而引起的可用性降低而提出的解決方案。它的目的是通過讓系統放鬆對某一時刻資料一致性的要求來換取系統整體伸縮性和效能上改觀。BASE理論是對CAP理論的延伸,核心思想是即使無法做到強一致性(Strong Consistency,CAP的一致性就是強一致性),但應用可以採用適合的方式達到最終一致性(Eventual Consitency)。

BASE是指 基本可用(Basically Available)、軟狀態( Soft State)、最終一致性( Eventual Consistency)

  • 基本可用(Basically Available) 
    基本可用是指分散式系統在出現故障的時候,允許損失部分可用性,即保證核心可用。 
    電商大促時,為了應對訪問量激增,部分使用者可能會被引導到降級頁面,服務層也可能只提供降級服務。這就是損失部分可用性的體現。

  • 軟狀態( Soft State) 
    軟狀態是指允許系統存在中間狀態,而該中間狀態不會影響系統整體可用性。分散式儲存中一般一份資料至少會有三個副本,允許不同節點間副本同步的延時就是軟狀態的體現。mysql replication的非同步複製也是一種體現。

  • 最終一致性( Eventual Consistency) 
    最終一致性是指系統中的所有資料副本經過一定時間後,最終能夠達到一致的狀態。弱一致性和強一致性相反,最終一致性是弱一致性的一種特殊情況。

  

BASE模型是傳統ACID模型的反面,不同於ACID,BASE強調犧牲高一致性,從而獲得可用性,資料允許在一段時間內的不一致,只要保證最終一致就可以了。

 

 

參考:https://blog.csdn.net/zjcjava/article/details/78893368