NoSQL(NoSQL = Not Only SQL ),意即"不只僅是SQL",指的是非關係型的數據庫。NoSQL用於超大規模數據的存儲。(例如谷歌或Facebook天天爲他們的用戶收集萬億比特的數據)。這些類型的數據存儲不須要固定的模式,無需多餘操做就能夠橫向擴展。數據庫
事務在英文中是transaction,和現實世界中的交易很相似,它有以下四個特性:json
一、A (Atomicity) 原子性
原子性很容易理解,也就是說事務裏的全部操做要麼所有作完,要麼都不作,事務成功的條件是事務裏的全部操做都成功,只要有一個操做失敗,整個事務就失敗,須要回滾。架構
好比銀行轉帳,從A帳戶轉100元至B帳戶,分爲兩個步驟:1)從A帳戶取100元;2)存入100元至B帳戶。這兩步要麼一塊兒完成,要麼一塊兒不完成,若是隻完成第一步,第二步失敗,錢會莫名其妙少了100元。併發
二、C (Consistency) 一致性
一致性也比較容易理解,也就是說數據庫要一直處於一致的狀態,事務的運行不會改變數據庫本來的一致性約束。分佈式
例如現有完整性約束a+b=10,若是一個事務改變了a,那麼必須得改變b,使得事務結束後依然知足a+b=10,不然事務失敗。性能
三、I (Isolation) 獨立性
所謂的獨立性是指併發的事務之間不會互相影響,若是一個事務要訪問的數據正在被另一個事務修改,只要另一個事務未提交,它所訪問的數據就不受未提交事務的影響。
好比現有有個交易是從A帳戶轉100元至B帳戶,在這個交易還未完成的狀況下,若是此時B查詢本身的帳戶,是看不到新增長的100元的。設計
四、D (Durability) 持久性
持久性是指一旦事務提交後,它所作的修改將會永久的保存在數據庫上,即便出現宕機也不會丟失。xml
在計算機科學中, CAP定理(CAP theorem), 又被稱做 布魯爾定理(Brewer's theorem), 它指出對於一個分佈式計算系統來講,不可能同時知足如下三點:對象
CAP理論的核心是:一個分佈式系統不可能同時很好的知足一致性,可用性和分區容錯性這三個需求,最多隻能同時較好的知足兩個。blog
所以,根據 CAP 原理將 NoSQL 數據庫分紅了知足 CA 原則、知足 CP 原則和知足 AP 原則三 大類:
優勢:
缺點:
BASE:Basically Available, Soft-state, Eventually Consistent。 由 Eric Brewer 定義。
CAP理論的核心是:一個分佈式系統不可能同時很好的知足一致性,可用性和分區容錯性這三個需求,最多隻能同時較好的知足兩個。
BASE是NoSQL數據庫一般對可用性及一致性的弱要求原則:
ACID | BASE |
---|---|
原子性(Atomicity) | 基本可用(Basically Available) |
一致性(Consistency) | 軟狀態/柔性事務(Soft state) |
隔離性(Isolation) | 最終一致性(Eventual consistency) |
持久性(Durable) |
類型 | 部分表明
|
特色 |
列存儲 | 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。 |