1、緩存數據庫介紹
NoSQL(NoSQL = Not Only SQL ),意即「不只僅是SQL」,泛指非關係型的數據庫,隨着互聯網web2.0網站的興起,傳統的關係數據庫在應付web2.0網站,特別是超大規模和高併發的SNS類型的web2.0純動態網站已經顯得力不從心,暴露了不少難以克服的問題,而非關係型的數據庫則因爲其自己的特色獲得了很是迅速的發展。NoSQL數據庫的產生就是爲了解決大規模數據集合多重數據種類帶來的挑戰,尤爲是大數據應用難題。web
2、緩存數據的四大類型
1.鍵值(Key-Value)存儲數據庫
算法
這一類數據庫主要會使用到一個哈希表,這個表中有一個特定的鍵和一個指針指向特定的數據。Key/value模型對於IT系統來講的優點在於簡單、易部署。可是若是DBA只對部分值進行查詢或更新的時候,Key/value就顯得效率低下了。
如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB.
2.列存儲數據庫
這部分數據庫一般是用來應對分佈式存儲的海量數據。鍵仍然存在,可是它們的特色是指向了多個列。這些列是由列家族來安排的。
如:Cassandra, HBase, Riak.
3.文檔型數據庫
文檔型數據庫的靈感是來自於Lotus Notes辦公軟件的,並且它同第一種鍵值存儲相相似。該類型的數據模型是版本化的文檔,半結構化的文檔以特定的格式存儲,好比JSON。文檔型數據庫可 以看做是鍵值數據庫的升級版,容許之間嵌套鍵值。並且文檔型數據庫比鍵值數據庫的查詢效率更高。
如:CouchDB, MongoDb. 國內也有文檔型數據庫SequoiaDB,已經開源。
4.圖形(Graph)數據庫
圖形結構的數據庫同其餘行列以及剛性結構的SQL數據庫不一樣,它是使用靈活的圖形模型,而且可以擴展到多個服務器上。NoSQL數據庫沒有標準的查詢語言(SQL),所以進行數據庫查詢須要制定數據模型。許多NoSQL數據庫都有REST式的數據接口或者查詢API。
如:Neo4J, InfoGrid, Infinite Graph.
所以,咱們總結NoSQL數據庫在如下的這幾種狀況下比較適用:
一、數據模型比較簡單;
二、須要靈活性更強的IT系統;
三、對數據庫性能要求較高;
四、不須要高度的數據一致性;
五、對於給定key,比較容易映射覆雜值的環境。
3、關係型數據庫和NoSQL數據庫的區別
1.使用關係型數據庫的場景
- 數據結構良好,並適合關係數據庫中的列表安排(行和列)。典型示例:銀行帳戶信息、客戶訂單信息、客戶信息、員工信息、部門信息等。
- 上述觀點的另外一個方面是:面向模式的數據模型。當您爲有潛在可能性會使用的RDBMS設計數據模型(表、關係等)時,您須要提出一個定義良好的模式:將會有許多表,每一個表都有一個已知的列,以已知類型的格式存儲數據(CHAR、NUMBER、BLOB等)。
- 很是重要:考慮數據是否在本質上是事務性的。換句話說,在提供的事務上下文ACID語義中,數據是否會被存儲、訪問和更新,或者是否能夠對這些屬性進行折衷。
- 正確性也很重要,任何妥協都是不可接受的。這源於這樣一個事實,在大多數NoSQL數據庫中,一致性被放棄,用以支持性能和可伸縮性。
- 沒有一個強烈的/迫切的須要拓展的數據庫需求;將一個數據庫(水平擴展)線性擴展到在集羣中的多個節點的數據庫。
- 用例不用於「高速數據攝取」。
- 若是客戶機應用程序指望快速地將大量數據流到數據庫中,那麼關係數據庫可能就不是一個好選擇,由於它們實際上不是爲編寫繁重的工做負載而設計的。
- 爲了實現ACID屬性,許多額外的後臺工做都是在編寫器(插入、更新、刪除)代碼路徑中完成的。這確定會影響性能。
- 這個用例並非爲了「存儲大量的pb級數據」。
2.使用NoSQL數據庫:數據庫
- 沒有固定的(和預先肯定的)適合數據的模式
- 可伸縮性、性能(高吞吐量和低操做延遲),持續可用性是數據庫基礎架構須要知足的很是重要的需求。
- 「高速數據攝食」的最佳選擇。這樣的應用程序(例如IoT風格),每秒生成數百萬個數據點,須要一個可以提供可伸縮性的極限寫入數據庫
- 橫向規模的NoSQL數據庫的內在能力容許在集羣中跨商品服務器存儲大量數據。它們一般使用低成本的資源,隨着需求的增加,它們可以線性增長計算和存儲能力。
3.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度關係查找等 |
不少時候須要對整個圖作計算才能得出須要的信息,並且這種結構不太好作分佈式的集羣方案。 |