公司最近正在做NoSQL選型,通過一周的時間對幾種常用的NoSQL做了以下粗略的分析和比較
名詞解釋:
分布式儲存單元:在分布式儲存中,通常要把比較大的資料檔案切割成不同的塊,以便放到不同的機器上分開儲存,每一個分割塊稱之為一個儲存單元。
一、CouchDB
CouchDB是一種面向文檔(document-oriented)的nosql資料庫,文檔的儲存格式通過JSON進行描述,在結構部署上採用的是peer-based方式,即每台機器在功能上來講是同等重要的,沒有master和slave的區分,所儲存的資料也都是相同的(沒有做到資料的分布式儲存),類似於Subversion中版本庫和工作拷貝的概念。
官方文檔中所聲明的功能特性主要有以下幾個方面:
1.多平台部署,包括Android和iOS
2.出色的資料完整性和可靠性支援
3.對BLOB資料類型提供原生支援
4.基於文檔的版本管理功能
5.架構內建MapReduce組件
6.query查詢支援(通過javascript)
7.提供Java API和REST API
優勢:
多平台支援(移動平台)
在資料量較小的情況下,可作為單機版離線使用,而在必要的時候進行連網更新。
二、Redis
Redis是一種基於key-value儲存格式的nosql資料庫,在結構部署上採用了master/slave的方式,其中slave節點起到備份的作用,當master節點出現問題的時候,slave節點可替換成master,從而確保了系統安全穩定的特性。
分布式儲存單元:slot(一組key/value儲存記錄的集合)
一個cluster裡面可能會有多個matser節點,master節點通過互相通訊來記錄彼此之間所儲存的slot資訊,從而確保了client端可以通過任何master節點定位到需要的slot,擷取到slot資訊後,client端還會將該slot地址緩衝到本地,從而加快了下次查詢的效率。
部署結構:
註:圖中沒有畫出slave節點(slave只是起到備份master的作用),所有的圓圈全部為master,並且master之間的通訊呈網狀結構。