常用NoSQL比较

fmms 12年前

以几种常用的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框架支持

功能模块划分详细,基本上每一个功能模块都是通过一个框架来实现