什麼是NoSQL?
什麼是NoSQL?
NoSQL,指的是非關係型的數據庫。NoSQL有時也稱作Not Only SQL的縮寫,是對不同於傳統的關係型數據庫的數據庫管理係統的統稱。
NoSQL用於超大規模數據的存儲。(例如穀歌或Facebook每天為他們的用戶收集萬億比特的數據)。這些類型的數據存儲不需要固定的模式,無需多餘操作就可以橫向擴展。
RDBMS 回顧
RDBMS即關係數據庫管理係統(Relational Database Management System),是將數據組織為相關的行和列的係統,而管理關係數據庫的計算機軟件就是關係數據庫管理係統,常用的數據庫軟件有Oracle、SQL Server等。
關係型數據庫遵循ACID規則
事務在英文中是transaction,和現實世界中的交易很類似,它有如下四個特性:
1、A (Atomicity) 原子性
原子性很容易理解,也就是說事務裏的所有操作要麼全部做完,要麼都不做,事務成功的條件是事務裏的所有操作都成功,隻要有一個操作失敗,整個事務就失敗,需要回滾。
比如銀行轉賬,從A賬戶轉100元至B賬戶,分為兩個步驟:1)從A賬戶取100元;2)存入100元至B賬戶。這兩步要麼一起完成,要麼一起不完成,如果隻完成第一步,第二步失敗,錢會莫名其妙少了100元。
2、C (Consistency) 一致性
一致性也比較容易理解,也就是說數據庫要一直處於一致的狀態,事務的運行不會改變數據庫原本的一致性約束。
例如現有完整性約束a+b=10,如果一個事務改變了a,那麼必須得改變b,使得事務結束後依然滿足a+b=10,否則事務失敗。
3、I (Isolation) 獨立性
所謂的獨立性是指並發的事務之間不會互相影響,如果一個事務要訪問的數據正在被另外一個事務修改,隻要另外一個事務未提交,它所訪問的數據就不受未提交事務的影響。
比如現有有個交易是從A賬戶轉100元至B賬戶,在這個交易還未完成的情況下,如果此時B查詢自己的賬戶,是看不到新增加的100元的。
4、D (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 - 滿足可用性,分區容忍性的係統,通常可能對一致性要求低一些。
· 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