1. 程式人生 > >Nosql資料庫介紹及與關係型資料庫的比較

Nosql資料庫介紹及與關係型資料庫的比較

一、nosql資料庫介紹

NoSQL = Not only SQL,非關係型資料庫

nosql儲存的是非關係型資料,像文件啊,影象啊,很明顯這些大的資料單臺伺服器是不夠儲存的,所以它支援高可擴充套件性,分散式計算。常用於分散式系統。

NoSQL資料庫的型別:鍵值資料庫(redis)、列族資料庫(HBASE)、文件資料庫(mongoDB)、影象資料庫(Neo4j)、xml資料庫(BaseX)

NoSQL資料庫的三大理論基石:CAP,最終一致性,BASE

1.CAP

  • C(Consistency):一致性,是指寫操作之後的讀操作,必須返回該值
  • A(Availability):可用性,是指快速獲取資料,保證每個請求不管成功或者失敗都有響應
  • P(Partition tolerance):分割槽容錯,是指區間通訊可能失敗,但分離的系統也能夠正常執行,系統中任意資訊的丟失或失敗不會影響系統的繼續運作。

一個分散式系統不可能同時滿足這三個指標,一般來說我們認為 CAP 的 P 總是成立,故剩下的 C 和 A 無法同時做到。

當處理CAP的問題時,有幾個明顯的選擇:

  • 1.CA:放棄分割槽容忍性(P),最簡單的做法就是把所有事務相關的內容都放到同一臺機器上。顯然這樣嚴重影響系統的可擴張性,所以不適用於分散式系統。傳統資料庫都是這種設計原則(mysql,sql server)
  • 2.CP:放棄可用性(A),當出現網路分割槽的情況時,受影響的服務需要等待資料一致,因此在等待期間無法對外提供服務(MongoDB,Hbase)
  • 3.AP:放棄一致性(C),允許系統返回不一致的資料(Dynamo,Cassandra)
宣告:

放棄分割槽容忍性(P)就是放棄使用分散式系統。

一致性和可用性,為什麼不可能同時成立?

答案很簡單,因為可能通訊失敗(即出現分割槽容錯),大多數分散式系統都分佈在多個子網路。每個子網路就叫做一個區(partition)。分割槽容錯的意思是,區間通訊可能失敗。比如,一臺伺服器放在中國,另一臺伺服器放在美國,這就是兩個區,它們之間可能無法通訊。一般來說,分割槽容錯無法避免。

2.BASE

BASE的基本含義是基本可用、軟狀態和最終一致性

  • 基本可用:指一個分散式系統的一部分發生問題變得不可用時,其他部分依然可以正常使用,就是允許分割槽失敗的情形出現
  • 軟狀態:指資料的狀態可以有一段時間不同步,具有一定的滯後性
  • 最終一致性:允許後續的訪問操作可以暫時讀不到更新後的資料,但經過一段時間後,必須最終讀到更新後的資料

3.最終一致性

最終一致性根據更新資料後各程序訪問到資料的時間和方式不同,又可以分為:

  • 因果一致性:如果程序A通知程序B它更新了一個數據項,那麼B的後續訪問將得到A寫入的最新值。
  • 讀己之所寫一致性:當程序A自己執行一個更新操作之後,它自己總是可以訪問到更新過的值,而不是舊值,可視為因果一致性的一個特例
  • 單調讀一致性:如果程序看到過資料物件的某個值,那麼如何後續訪問都不會讀取那個值之前的歷史值
  • 會話一致性:它把訪問儲存系統的程序放到會話的上下文中,只要會話還存在,系統就保證“讀己之所寫一致性”
  • 單調寫一致性:系統保證來自同一個程序的寫操作順序執行

二、NoSQL與關係型資料庫的比較

1.關係型資料庫

  • 優勢:以完善的關係代數理論作為基礎,有嚴格的標準,支援事務ACID四性,藉助索引機制可以實現高效的查詢,技術成熟,有專業公司的技術支援。

  • 劣勢:可擴充套件性較差,無法較好支援海量資料儲存,資料模型過於死板,無法較好支援Web2.0應用,事務機制影響了系統的整體效能

應用場景:電信、銀行等領域的關鍵業務系統,需要保證強事務一致性

2.NoSQL資料庫。

  • 優勢:可以支援超大規模資料儲存,靈活的資料模型可以很好的支援Web2.0應用,具有強大的橫向擴充套件能力。

  • 劣勢:缺乏數學理論基礎,複雜查詢效能不高,大都不能實現事務強一致性,很難實現資料完整性,技術尚不成熟,缺乏專業團隊的技術支援,維護較困難。

應用場景:網際網路企業、傳統企業的非關鍵業務(比如資料分析)