常用NoSQL比較

fmms 12年前發布 | 104K 次閱讀 NoSQL數據庫 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地址緩存到本地,從而加快了下次查詢的效 率。

部署結構如圖所示:

常用NoSQL比較

注:圖中沒有畫出slave節點(slave只是起到備份master的作用),所有的圓圈全部為master,并且master之間的通信呈網狀結構。

三、MongoDB

同CouchDB一樣,MongoDB也是一種面向文檔的nosql數據庫,所不同的是在存儲方式上采用的是分布式存儲,其部署結構與Redis相似(基于master/slave方式),只不過功能組件較Redis劃分的更加詳細,如圖所示:

常用NoSQL比較

圖片說明:

shard:每一個master節點和用于備份它的slaves稱之為一個shard,系統由多個shards組成

config servers:記錄了每一個shard的地址,和shard所存儲的數據信息

mongos:同Redis的部署結構相比,mongos相當于是master和client之間的一個中間節點,起到路由和協調的功能,client端 不再直接與master進行交互,而是通過mongos找到合適的master,在將master的計算結果返回到client

分布式存儲單元:chunk

MongoDB中,Collection的概念類似于關系數據庫中的Table,用來存儲具有某一類性質的數據,而chunk是collection中一組元素的集合,mongoDB通過將每個Collection劃分成多個chunk來實現分布式存儲。

官方文檔中所聲明的功能特性主要有以下幾個方面:

1.系統橫向擴展功能--shard的熱插拔

2.自動切片功能,當每個chunk的數據量大到溢出時,mongDB會重新進行切片處理

3.自動故障轉移,master節點出現問題時,slave節點會替換掉master

4.負載均衡

6.query查詢支持(通過JSON表達式來描述)

7.框架封裝MapReduce組件

       mapReduce功能函數只能用javascript編寫,并且通過控制臺命令執行

8.GridFS文檔系統--功能類似于Hadoop的HDFS,實現分布式存儲功能

四、Hbase

HBase基于Google的BigTable構建,是一種column-oriented類型的nosql數據庫,在部署結構上依然采用master/slave方式,但是它的master/slave理念與MongoDB和Redis完全不同。

分布式存儲單元:Region

Hbase的schema描述在概念模型上延續了關系數據的Table定義,只不過它所定義的Table是沒有column約束的,Hbase通過將Table切割成多個Region來實現分布式存儲的功能,這樣每個Region都封裝了一組Row的范圍。

Hbase主要包含了3大功能組件,包括:

1.RegionServer:在HBase中,RegionServer充當slave角色,負責與client端進行交互。

2.MasterServer:充當master角色,負責將Region分配給RegionServer、動態加載或卸載RegionServer、對RegionServer實現負載均衡功能、管理schema定義

3.ClientLibrary:負責查找并緩存RegionServer及它所存儲的Region地址(通過METADATATabel)

在Hbase部署中,client不再和master進行交互,所有的讀寫操作都是直接通過RegionServer來完成,而master在此起到了負載均衡的作用,當某一個RegionServer加載量較大時,master可以將其中的Region重新切片部署。

官方文檔中所聲明的功能特性主要有以下幾個方面:

1.系統橫向擴展功能—RegionServer熱插拔

2.基于行的讀寫一致性

3.自動切片功能(基于Region)

4.自動故障轉移

       RegionServer出現問題時,系統會轉移到其他的RegionServer進行處理

5.負載均衡

6.集成Hadoop框架

       存儲基于Hadoop的HDFS,分布式計算基于Hadoop的MapReduce

7.塊緩存功能和豐富的過濾器功能--便于查詢操作

8.提供連接池功能

9.基于cell的版本功能

10.java API和REST API

優勢:

Query功能強大--HIVE框架支持

功能模塊劃分詳細,基本上每一個功能模塊都是通過一個框架來實現

 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!