閱讀348 返回首頁    go 阿裏雲 go 技術社區[雲棲]


什麼是NoSQL?

什麼是NoSQL?

NoSQL,指的是非關係型的數據庫。NoSQL有時也稱作Not Only SQL的縮寫,是對不同於傳統的關係型數據庫的數據庫管理係統的統稱。

NoSQL用於超大規模數據的存儲。(例如穀歌或Facebook每天為他們的用戶收集萬億比特的數據)。這些類型的數據存儲不需要固定的模式,無需多餘操作就可以橫向擴展。

 

 

RDBMS 回顧

RDBMS即關係數據庫管理係統(Relational Database Management System),是將數據組織為相關的行和列的係統,而管理關係數據庫的計算機軟件就是關係數據庫管理係統,常用的數據庫軟件有OracleSQL Server等。

 

關係型數據庫遵循ACID規則

事務在英文中是transaction,和現實世界中的交易很類似,它有如下四個特性:

1A (Atomicity) 原子性

原子性很容易理解,也就是說事務裏的所有操作要麼全部做完,要麼都不做,事務成功的條件是事務裏的所有操作都成功,隻要有一個操作失敗,整個事務就失敗,需要回滾。

比如銀行轉賬,從A賬戶轉100元至B賬戶,分為兩個步驟:1)從A賬戶取100元;2)存入100元至B賬戶。這兩步要麼一起完成,要麼一起不完成,如果隻完成第一步,第二步失敗,錢會莫名其妙少了100元。

2C (Consistency) 一致性

一致性也比較容易理解,也就是說數據庫要一直處於一致的狀態,事務的運行不會改變數據庫原本的一致性約束。

例如現有完整性約束a+b=10,如果一個事務改變了a,那麼必須得改變b,使得事務結束後依然滿足a+b=10,否則事務失敗。

3I (Isolation) 獨立性

所謂的獨立性是指並發的事務之間不會互相影響,如果一個事務要訪問的數據正在被另外一個事務修改,隻要另外一個事務未提交,它所訪問的數據就不受未提交事務的影響。

比如現有有個交易是從A賬戶轉100元至B賬戶,在這個交易還未完成的情況下,如果此時B查詢自己的賬戶,是看不到新增加的100元的。

4D (Durability) 持久性

持久性是指一旦事務提交後,它所做的修改將會永久的保存在數據庫上,即使出現宕機也不會丟失。

 

RDBMS vs NoSQL

RDBMS 
-
高度組織化結構化數據 
-
結構化查詢語言(SQL

- 數據和關係都存儲在單獨的表中。 
-
數據操縱語言,數據定義語言 
-
嚴格的一致性
-
基礎事務

NoSQL 
-
代表著不僅僅是SQL
-
沒有聲明性查詢語言
-
沒有預定義的模式
-
- 值對存儲,列存儲,文檔存儲,圖形數據庫
-
最終一致性,而非ACID屬性
-
非結構化和不可預知的數據
- CAP
定理 
-
高性能,高可用性和可伸縮性

 

NoSQL的優點/缺點

優點:

·         - 高可擴展性

·         - 分布式計算

·         - 低成本

·         - 架構的靈活性,半結構化數據

·         - 沒有複雜的關係

缺點:

·         - 沒有標準化

·         - 有限的查詢功能(到目前為止)

·         - 最終一致是不直觀的程序

CAP定理(CAP theorem

在計算機科學中, CAP定理(CAP theorem, 又被稱作 布魯爾定理(Brewer's theorem, 它指出對於一個分布式計算係統來說,不可能同時滿足以下三點:

·         一致性(Consistency) (所有節點在同一時間具有相同的數據)

·         可用性(Availability) (保證每個請求不管成功或者失敗都有響應)

·         分隔容忍(Partition tolerance) (係統中任意信息的丟失或失敗不會影響係統的繼續運作)

CAP理論的核心是:一個分布式係統不可能同時很好的滿足一致性,可用性和分區容錯性這三個需求,最多隻能同時較好的滿足兩個。

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

·         CA - 單點集群,滿足一致性,可用性的係統,通常在可擴展性上不太強大。

·         CP - 滿足一致性,分區容忍性的係統,通常性能不是特別高。

·         AP - 滿足可用性,分區容忍性的係統,通常可能對一致性要求低一些。

ba9ef585ed579f0f71d05a8a841d7f04a3674262

·         NoSQL 數據庫分類

類型

部分代表

特點

列存儲

Hbase

Cassandra

Hypertable

顧名思義,是按列存儲數據的。最大的特點是方便存儲結構化和半結構化數據,方便做數據壓縮,對針對某一列或者某幾列的查詢有非常大的IO優勢。

文檔存儲

MongoDB

CouchDB

文檔存儲一般用類似json的格式存儲,存儲的內容是文檔型的。這樣也就有有機會對某些字段建立索引,實現關係數據庫的某些功能。

key-value存儲

Tokyo Cabinet / Tyrant

Berkeley DB

MemcacheDB

Redis

可以通過key快速查詢到其value。一般來說,存儲不管value的格式,照單全收。(Redis包含了其他功能)

圖存儲

Neo4J

FlockDB

圖形關係的最佳存儲。使用傳統關係數據庫來解決的話性能低下,而且設計使用不方便。

對象存儲

db4o

Versant

通過類似麵向對象語言的語法操作數據庫,通過對象的方式存取數據。

xml數據庫

Berkeley DB XML

BaseX

高效的存儲XML數據,並支持XML的內部查詢語法,比如XQuery,Xpath。

 

 

最後更新:2017-11-15 10:04:24

  上一篇:go  mongodb查看表記錄計數
  下一篇:go  開機掛載文件係統