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應用,具有強大的橫向擴充套件能力。
-
劣勢:缺乏數學理論基礎,複雜查詢效能不高,大都不能實現事務強一致性,很難實現資料完整性,技術尚不成熟,缺乏專業團隊的技術支援,維護較困難。
應用場景:網際網路企業、傳統企業的非關鍵業務(比如資料分析)