1. 程式人生 > >Nosql數據庫的四大分類及分布式數據庫CAP原理

Nosql數據庫的四大分類及分布式數據庫CAP原理

會有 一個 獲得 nsis mongo 高效率 挑戰 csdn 系統

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

Nosql數據庫的四大分類及分布式數據庫CAP原理