“NoSQL指的是非關係型的數據庫。NoSQL也稱作Not Only SQL的縮寫,是對不同於傳統的關係型數據庫的數據庫管理系統的統稱。
What
- 沒有聲明性查詢語言
- 沒有預定義模式
- 存儲方式—鍵值對存儲,列存儲,文檔存儲,圖形數據庫
- CAP定理,非ACID屬性
- 高性能,高可用性,和可伸縮性
why
爲什麼要有NoSQL?
NoSQL在內存中保存數據,都具有非常高的讀寫性能,尤其在大數據容量下,同樣表現優秀。這得益於它的無關係性,數據庫的結構簡單。
一般MySQL使用Query Cache,每次表的更新Cache 就失效,是一種大粒度的Cache,在針對web2.0的交互頻繁的應用,Cache性能不高。而NoSQL的Cache是記錄級的,是一種細粒度的Cache,所以NoSQL在這個層面上來說就要性能高很多了
各種類型NoSQL數據比較
分類 | Example舉例 | 典型應用場景 | 數據模型 | 優點 | 缺點 |
---|---|---|---|---|---|
鍵值對 | Tokyo,Cabinet/Tyrant,Redis,Voldemort,Oracle BDB | 內存緩存,主要用於處理大量數據的高訪問負載,也用於一些日誌系統等等 | Key指向Value的鍵值對,通常用hash table來實現 | 查找速度快 | 數據無結構化,通常只被當做字符串或二進制數據 |
列存儲數據庫 | Cassandra,HBase,Riak | 分佈式的文件系統 | 以列簇式存儲,將同列數據存在一起 | 查找速度快,可擴展性強,更容易進行分佈式擴展 | 功能相對侷限 |
文檔型數據庫 | CouchDB,MongoDB | Web應用 | Key-Value | 數據結構要求不嚴格,表結構可變 | 查詢性能不高,缺乏統一的查詢語法 |
圖形數據庫 | Neo4J,InfoGrid,Infinite Graph | 社交網絡,推薦系統等 | 圖結構 | 利用圖結構相關算法 | 很多時候需要對整個圖做計算 |
傳統的ACID
- A(Atomicity) 原子性
- C(Consistency) 一致性
- I(Isolation) 獨立性
- D(Durability) 持久性
CAP
- C:Consistency(強一致性)
- A:Availability(可用性)
- P:Partition tolerance(分區容錯性)
CAP理論是指在分佈式存儲系統中,最多隻能實現上述的兩點,由於網絡硬件延遲丟包,所以P(分區容錯性)是我們所必須要實現的
網站一般實現AP
而Redis、MongoDB則是實現CP
什麼是分佈式系統
由多臺計算機和通信的軟件組件通過計算機網絡連接組成。分佈式系統是建立在網絡之上的軟件系統,正是因爲這樣,所以分佈式系統具有高度的內聚性和透明性。
簡單來說分佈式就是不同的多態服務器部署不同的服務模塊
什麼是集羣
不同的多臺服務器部署相同的服務模塊,通過分佈式調度軟件進行統一的調度。