Nosql解讀

NoSQL(Not Only SQL),泛指非關係型數據庫,它的出現告訴我們:適用關係型數據庫的時候就使用關係型數據庫,不適用的時候也沒有必要非使用關係型數據庫不可,可以考慮使用更加合適的數據存儲。

NoSQL簡介

關係型數據庫的不足

關係型數據庫的性能非常高,但是它畢竟是一個通用型的數據庫,並不能完全適應所有的用途,具體來說它並不擅長以下處理:
- 大量數據的寫入處理
- 爲有數據更新的表做索引或表結構變更
- 字段不固定時應用
- 對簡單查詢需要快速返回結果的處理

這裏逐一進行說明:
1. 大量數據的寫入處理
  在數據讀入方面,由複製產生的主從模式(數據的寫入由主數據庫負責,數據的讀入由從數據庫負責),可以比較簡單的通過增加從數據庫來實現規模化,但是在數據庫的寫入方面卻不是這麼簡單,例如,考慮把主數據庫從一臺增加到倆臺,做爲互相關聯複製的二元主數據庫來使用,確實這樣似乎可以把每臺主數據庫的負荷減少一半,但是更新處理會發生衝突(同樣的數據在倆臺服務器同時更新成其他值),可能會造成數據的不一致,爲了避免這樣的問題,就需要把對某個表的請求分別分配給合適的的主數據庫來處理。
  另外也可以考慮把數據庫分割開來,分別放在不同的數據庫服務器上。數據庫分割可以減少每臺數據庫服務器上的數據量,以便減少磁盤I/O處理,實現內存上的高速處理。但是這樣做存儲在不同服務器上的表之間就無法進行join處理。
  
2. 爲有數據更新的表做索引或表結構變更
  在使用關係型數據庫時,爲了加快查詢速度需要創建索引,爲了增加必要的字段就一定需要改變表結構。爲了進行這些處理,需要對錶進行共享鎖定,這期間數據變更(更新,插入,刪除)是無法進行的。如果爲數據量比較大的表創建索引或者是變更其表結構,就可能會導致長時間內數據無法進行更新。
  
3. 字段不固定時的應用
  如果字段不固定,在實際運用中每次都進行反覆的表結構變更時非常痛苦的,也可以預先設定大量的預備字段,但這樣的話很容易弄不清楚字段和數據的對應狀態。
  
4. 對簡單查詢需要快速返回結果的處理
  關係型數據庫並不擅長對簡單的查詢快速返回結果,因爲關係型數據庫是使用SQL進行讀取的,它需要對SQL語言進行解析,同時還有對錶的的鎖定和解鎖這樣的額外開銷。若希望對簡單查詢進行高速處理,沒有必要非用關係型數據庫不可。

RDBMS和NoSQL的區別

RDBMS NoSQL
遵循ACID原則(原子性,一致性,獨立性,持久性) BASE原則(基本可用,軟狀態/柔性事務,最終一致性)
結構化查詢語言(SQL) 沒有標準統一的查詢語言
高度組織化結構化數據 非結構化和不可預知的數據
  CAP定理

CAP定理

在計算機科學中, CAP定理(CAP theorem), 又被稱作 布魯爾定理(Brewer’s theorem), 它指出對於一個分佈式計算系統來說,不可能同時滿足以下三點:
- 一致性(Consistency) (所有節點在同一時間具有相同的數據)
- 可用性(Availability) (保證每個請求不管成功或者失敗都有響應)
- 分隔容忍(Partition tolerance) (系統中任意信息的丟失或失敗不會影響系統的繼續運作)

CAP理論的核心是:一個分佈式系統不可能同時很好的滿足一致性,可用性和分區容錯性這三個需求,最多隻能同時較好的滿足兩個。
因此,根據 CAP 原理將 NoSQL 數據庫分成了滿足 CA 原則、滿足 CP 原則和滿足 AP 原則三大類:
- CA - 單點集羣,滿足一致性,可用性的系統,通常在可擴展性上不太強大。
- CP - 滿足一致性,分區容忍性的系統,通常性能不是特別高。
- AP - 滿足可用性,分區容忍性的系統,通常可能對一致性要求低一些。
cap

NoSQL數據庫分類

類型 部分代表 特點
列存儲 Hbase
Cassandra
Hypertable
按列存儲數據。最大的特點是方便存儲結構化和半結構化數據,方便做數據壓縮,對針對某一列或者某幾列的查詢有非常大的IO優勢
文檔存儲 MongoDB
CouchDB
文檔存儲一般用類似json的格式存儲,存儲的內容是文檔型的。這樣也就有機會對某些字段建立索引,實現關係數據庫的某些功能
key-value存儲 Redis
MemcacheDB
可以通過key快速查詢到其value。一般來說,存儲不管value的格式,照單全收
圖存儲 Neo4J
FlockDB
圖形關係的最佳存儲。使用傳統關係數據庫來解決的話性能低下,而且設計使用不方便
對象存儲 db4o
Versant
通過類似面嚮對象語言的語法操作數據庫,通過對象的方式存取數據
xml數據庫 BaseX 高效的存儲XML數據,並支持XML的內部查詢語法,比如XQuery,Xpath

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章