NoSQL數據庫(Not Only SQL),NoSQL,泛指非關係型的數據庫。html
1、NoSQL數據庫的四大分類
這一類數據庫主要會使用到一個
哈希表,這個表中有一個特定的鍵和一個指針指向特定的數據。Key/value模型對於IT系統來講的優點在於簡單、易部署。可是若是
DBA只對部分值進行查詢或更新的時候,Key/value就顯得效率低下了。舉例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB.
二、列存儲數據庫。
這部分數據庫一般是用來應對分佈式存儲的海量數據。鍵仍然存在,可是它們的特色是指向了多個列。這些列是由列家族來安排的。如:Cassandra, HBase, Riak.
三、文檔型數據庫
文檔型數據庫的靈感是來自於Lotus Notes辦公軟件的,並且它同第一種鍵值存儲相相似。該類型的數據模型是版本化的文檔,半結構化的文檔以特定的格式存儲,好比JSON。文檔型數據庫可 以看做是鍵值數據庫的升級版,容許之間嵌套鍵值。並且文檔型數據庫比鍵值數據庫的查詢效率更高。如:CouchDB, MongoDb. 國內也有文檔型數據庫SequoiaDB,已經開源。
四、圖形(Graph)數據庫
圖形結構的數據庫同其餘行列以及剛性結構的SQL數據庫不一樣,它是使用靈活的圖形模型,而且可以擴展到多個服務器上。NoSQL數據庫沒有標準的查詢語言(SQL),所以進行數據庫查詢須要制定數據模型。許多NoSQL數據庫都有REST式的數據接口或者查詢API。如:Neo4J, InfoGrid, Infinite Graph.
所以,咱們總結NoSQL數據庫在如下的這幾種狀況下比較適用:一、數據模型比較簡單;二、須要靈活性更強的IT系統;三、對數據庫性能要求較高;四、不須要高度的數據一致性;五、對於給定key,比較容易映射覆雜值的環境。
2、NoSQL數據庫的四大分類表格分析
分類 |
Examples舉例 |
典型應用場景 |
數據模型 |
優勢 |
缺點 |
鍵值(key-value) |
Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB |
內容緩存,主要用於處理大量數據的高訪問負載,也用於一些日誌系統等等。 |
Key 指向 Value 的鍵值對,一般用hash table來實現 |
查找速度快 |
數據無結構化,一般只被看成字符串或者二進制數據 |
列存儲數據庫 |
Cassandra, HBase, Riak |
分佈式的文件系統 |
以列簇式存儲,將同一列數據存在一塊兒 |
查找速度快,可擴展性強,更容易進行分佈式擴展 |
功能相對侷限 |
文檔型數據庫 |
CouchDB, MongoDb |
Web應用(與Key-Value相似,Value是結構化的,不一樣的是數據庫可以瞭解Value的內容) |
Key-Value對應的鍵值對,Value爲結構化數據 |
數據結構要求不嚴格,表結構可變,不須要像關係型數據庫同樣須要預先定義表結構 |
查詢性能不高,並且缺少統一的查詢語法。 |
圖形(Graph)數據庫 |
Neo4J, InfoGrid, Infinite Graph |
社交網絡,推薦系統等。專一於構建關係圖譜 |
圖結構 |
利用圖結構相關算法。好比最短路徑尋址,N度關係查找等 |
不少時候須要對整個圖作計算才能得出須要的信息,並且這種結構不太好作分佈式的集羣方案。
|
3、適用場景
NoSQL數據庫在如下的這幾種狀況下比較適用:
一、數據模型比較簡單;
二、須要靈活性更強的IT系統;
三、對數據庫性能要求較高;
四、不須要高度的數據一致性;
五、對於給定key,比較容易映射覆雜值的環境。
4、常見NoSql數據庫
聽說如今已經有上百種NoSQL數據庫了,下面來了解下常見的一些NoSQL數據庫算法
先來看張表,瞭解下典型的NoSQL數據庫的分類:數據庫
臨時性鍵值存儲 |
永久性鍵值存儲 |
面向文檔的數據庫 |
面向列的數據庫 |
Memcached |
Tokyo Tyrant |
MangoDB |
Cassandra |
Redis |
Flare |
CouchDB |
HBase |
|
ROMA |
|
HyperTable |
|
Redis |
|
|
- 揮發性(臨時性)的鍵值存儲
- 通常做爲關係型數據庫的緩存來使用
- 具備很是快的處理速度
- 因爲存在數據丟失的可能,因此通常用來處理不須要持久保存的數據
- 用於須要使用expires時(須要按期清除數據)
- 使用一致性散列(Consistent Hashing)算法來分散數據
Tokyo Tyrant
- 持久性的鍵值存儲
- 用來處理須要持久保存,高速處理的數據
- 具備很是快的處理速度
- 用於不須要按期清除的數據
- 使用一致性散列(Consistent Hashing)算法來分散數據
Redis
- 兼具Memcached和Tokyo Tyrant優點的鍵值存儲
- 擅長處理數組類型的數據
- 具備很是快的處理速度
- 能夠高速處理時間序列的數據,易於處理集合運算
- 擁有不少能夠進行原子操做的方法
- 使用一致性散列(Consistent Hashing)算法來分散數據
MongoDB
- 面向無需定義表結構的文檔數據
- 具備很是快的處理速度
- 經過BSON的形式能夠保存和查詢任何類型的數據
- 沒法進行JOIN處理,可是能夠經過嵌入(embed)來實現一樣的功能
- 使用sharding(範圍分割)算法來分散數據
上面屢次提到了一致性散列,那到底什麼是一致性散列呢?請參考這裏 ,我就不贅述了數組
不過,當server數量不多時,極可能他們在圓周上的分佈不是特別均勻,
致使cache不能均勻分佈到全部的server上。緩存
這時候,就該請出虛擬節點了
爲每一個物理節點(服務器)在圓上分配100~200個點,服務器
這樣就能抑制分佈不均勻,最大限度地減少服務器增減時的緩存從新分佈,網絡
用戶數據映射在虛擬節點上,就表示用戶數據真正存儲位置是在該虛擬節點表明的實際物理服務器上。數據結構