參照:NoSQLデータベースファーストガイド
一、 鍵值存儲
它的數據是以鍵值的形式存儲的,雖然它的速度非常快,但基本上只能通過鍵的完全一致查詢獲取數據,根據數據的保存方式可以分為臨時性、永久性和兩者兼具三種。
(1)臨時性(memcached)
所謂臨時性就是數據有可能丟失,memcached把所有數據都保存在內存中,這樣保存和讀取的速度非常快,但是當memcached停止時,數據就不存在了。由於數據保存在內存中,所以無法操作超出內存容量的數據,舊數據會丟失。
總結來說:
1、在內存中保存數據
2、可以進行非常快速的保存和讀取處理
3、數據有可能丟失
(2)永久性(ROMA、Tokyo Tyrant、Flare)
所謂永久性就是數據不會丟失,這裡的鍵值存儲是把數據保存在硬盤上,與臨時性比起來,由於必然要發生對硬盤的IO操作,所以性能上還是有差距的,但數據不會丟失是它最大的優勢。
總結來說:
1、在硬盤上保存數據
2、可以進行非常快速的保存和讀取處理(但無法與memcached相比)
3、數據不會丟失
(3)兩者兼備(Redis)
Redis有些特殊,臨時性和永久性兼具。Redis首先把數據保存在內存中,在滿足特定條件(默認是 15分鐘一次以上,5分鐘內10個以上,1分鐘內10000個以上的鍵發生變更)的時候將數據寫入到硬盤中,這樣既確保了內存中數據的處理速度,又可以通過寫入硬盤來保證數據的永久性,這種類型的數據庫特別適合處理數組類型的數據。
總結來說:
同時在內存和硬盤上保存數據
1、可以進行非常快速的保存和讀取處理
2、保存在硬盤上的數據不會消失(可以恢復)
3、適合於處理數組類型的數據
二、面向文檔的數據庫(MongoDB、CouchDB)
(1)不定義表結構
即使不定義表結構,也可以像定義了表結構一樣使用,還省去了變更表結構的麻煩。
(2)可以使用復雜的查詢條件
跟鍵值存儲不同的是,面向文檔的數據庫可以通過復雜的查詢條件來獲取數據,雖然不具備事務處理和Join這些關系型數據庫所具有的處理能力,但初次以外的其他處理基本上都能實現。
三、 面向列的數據庫(Cassandra、HBase、HyperTabl)
由於近年來數據量出現爆發性增長,這種類型的NoSQL數據庫尤其引入注目。
普通的關系型數據庫都是以行為單位來存儲數據的,擅長以行為單位的讀入處理,比如特定條件數據的獲取。因此,關系型數據庫也被成為面向行的數據庫。相反,面向列的數據庫是以列為單位來存儲數據的,擅長以列為單位讀入數據。