NoSQL數據庫發展迅猛,據說現在已經有上百種NoSQL數據庫了,下面來了解下常見的一些NoSQL數據庫
先來看張表,了解下典型的NoSQL數據庫的分類
臨時性鍵值存儲 | 永久性鍵值存儲 | 面向文檔的數據庫 | 面向列的數據庫 |
Memcached | Tokyo Tyrant | MangoDB | Cassandra |
Redis | Flare | CouchDB | HBase |
ROMA | HyperTable | ||
Redis |
Memcached
- 揮發性(臨時性)的鍵值存儲
- 一般作為關系型數據庫的緩存來使用
- 具有非常快的處理速度
- 由於存在數據丟失的可能,所以一般用來處理不需要持久保存的數據
- 用於需要使用expires時(需要定期清除數據)
- 使用一致性散列(Consistent Hashing)算法來分散數據
Tokyo Tyrant
- 持久性的鍵值存儲
- 用來處理需要持久保存,高速處理的數據
- 具有非常快的處理速度
- 用於不需要定期清除的數據
- 使用一致性散列(Consistent Hashing)算法來分散數據
Redis
- 兼具Memcached和Tokyo Tyrant優勢的鍵值存儲
- 擅長處理數組類型的數據
- 具有非常快的處理速度
- 可以高速處理時間序列的數據,易於處理集合運算
- 擁有很多可以進行原子操作的方法
- 使用一致性散列(Consistent Hashing)算法來分散數據
MongoDB
- 面向無需定義表結構的文檔數據
- 具有非常快的處理速度
- 通過BSON的形式可以保存和查詢任何類型的數據
- 無法進行JOIN處理,但是可以通過嵌入(embed)來實現同樣的功能
- 使用sharding(范圍分割)算法來分散數據
上面多次提到了一致性散列,那到底什么是一致性散列呢?請參考這里 ,我就不贅述了
不過,當server數量很少時,很可能他們在圓周上的分布不是特別均勻,
導致cache不能均勻分布到所有的server上。
這時候,就該請出虛擬節點了
為每個物理節點(服務器)在圓上分配100~200個點,
這樣就能抑制分布不均勻,最大限度地減小服務器增減時的緩存重新分布,
用戶數據映射在虛擬節點上,就表示用戶數據真正存儲位置是在該虛擬節點代表的實際物理服務器上。