NoSql研究报告

NoSql研究报告

1、概述

  随着互联网的不断发展,信息系统的数据变得越来越多,关系型数据库逐渐面临着难以克服的障碍,主要体现在:

  1. 对数据库的高并发读写需求
  2. 对海量数据的高效率存储和访问需求
  3. 对数据库的高扩展性和高可用性的需求

  而在大多数与海量数据相关的应用场景下,传统关系型数据库的诸多特性却显得不那么重要(例如事务、读写实时性、多表关联),因此,非关系型数据库(NoSql)应运而生。

  本文即针对当前较为主流的NoSql产品进行了横向对比。旨在为NoSql产品的选型提供依据。

2、功能对比

 

MongoDB

Redis

CouchDB

Cassandra

HBase

实现语言

C++

C/C++

Erlang

Java

Java

存储结构

Document

Key-Value

Document

Wide Column

Wide Column

支持协议

自定义、Binary

自定义、binary

HTTP/REST

Telnet-like

HTTP/REST

存储类型

普通文件系统

内存

普通文件系统

Dynamo架构

HDFS

数据复制

支持以下3种数据复制方式:Matser/Matser,Matser/Slave,Replica Sets

主从复制Master/Slave
一个从节点可以作为另一个节点的主节点

双向数据复制,Master-Master

节点由单个Java进程构成,所有节点间通过Gossip协议进行数据复制

借助HDFS提供高可靠的数据可用性,在数据库层不需要进行数据复制。

水平扩展与数据分片

提供自动分片功能,水平扩展十分容易

暂时没有自动分片功能,需手动分片

有CouchDB Lounge这个代理插件可以做couchDB集群

扩容时需要调整数据分布,比较耗时。(通过Consistent Hash快速定位数据所在节点)

数据始终保持均匀分布,伸缩性较好。(通过Zookeeper定位目标Region Server,最后定位Region获取数据。Region Server扩容后,通过将自身发布到Master,Master仍保持均匀分布)

一致性

弱一致性(最终一致)

弱一致性(最终一致)

分布式做的不太好,还在开发中

使用Quorum NRW策略,通过Gossip协议保证最终一致性。

在数据库层只存在一份数据,具有强一致性

主要功能特性

1、json格式的查询和写入
2、支持索引和多列索引
3、支持count、distinct、group、map/reduce等聚合函数
4、存储javascript,可以在服务端存取javascript
5、具有完善的java API和ORM框架
6、具有较高性能。
7、固定集合的概念

1、内存数据库
2、性能极高,能支持超过 100K+ 每秒的读写频率
3、支持丰富的数据类型,包括二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 。
4、Publish/Subscribe
5、可以对数据进行过去设置
6、支持一些简单的事务,保证一些简单操作集合的原子性。
7、支持数据持久化

1、是一个MVCC的系统
2、不支持动态查询,通过建立视图的方式来查询。
3、是一个是一个”crash-only” 的系统,数据具有较高的可靠性
4、使用Restful的API

1、支持以某个范围的键值通过列查询
2、类似大表格的功能:列,某个特性的列集合
3、写操作比读操作更快
4、支持与hadoop结合进行map/reduce

1、采用分布式架构 Map/reduce,与hadoop完美结合
2、对实时查询进行优化
3、支持 XML, Protobuf, 和binary的HTTP
4、有多个产品支持Cascading, hive, and pig source and sink modules
5、不会出现单点故障
6、堪比MySQL的随机访问性能

主要应用场景

适用于需要动态查询支持;需要使用索引而不是 map/reduce功能;需要对大数据库有性能要求。

1、适用于数据变化快且数据库大小可遇见(适合内存容量)的应用程序

2、用作缓存,当memcached使用

用于数据变化较少,执行预定义查询,进行数据统计的应用程序。适用于需要提供数据版本支持的应用程序

当使用写操作多过读操作(记录日志)的场景

适用于偏好BigTable,并且需要对大数据进行随机、实时访问的场合

应用例子

计划使用mysql的系统都可以考虑使用mongodb,事务密集型系统除外

股票价格、数据分析、实时数据搜集、实时通讯

CRM、CMS系统。 master-master复制对于多站点部署是非常有用的

银行业,金融业(虽然对于金融交易不是必须的,但这些产业对数据库的要求会比它们更大)写比读更快,所以一个自然的特性就是实时数据分析

Facebook、淘宝

缺点

1、不支持事务

2、自动分片功能并不是很可靠

3、不能在AIX系统上安装

1、需要占用相当大的内存

2、没有提供自动分片功能

不支持动态查询,必须为每一个查询模式建立相应的view,并在此view的基础上进行查询

 

 

 

3、性能对比

3.1 测试环境

  optiplex 780 / 4G内存 / cent os 6

3.2 测试方案

  使用性能测试框架YCSB对各产品进行以下测试:

  1. 使用单线程插入1000W条数据
  2. 分别使用4/8/16/32/64/128线程,以读写负载比例为1:1的操作模式,对每款产品执行读写总计10W次操作。
  3. 根据每秒成功操作数(OPS)与每次操作平均延时(AL)分析各产品的性能。

3.3 测试结果

3.3.1 插入1000W条数据

  在该测试中,redis表现出了较为优异的性能,下图是详细测试情况,通过每秒成功操作次数(OPS)反映出了各产品在写入时性能表现,单位为(次/秒):

 

 

3.3.2  读/写10W次

  在该测试中,根据产品自身的特点,各产品在不同的环境下有不同的表现,下图是测试的详细情况,其中纵轴表示完成一次操作的平均延时,单位为us:

  读操作的平均延时统计:

 

 

         写操作的平均延时统计:

 

        

 

  除此之外,在读写负载比为1:1的情况下,各产品每秒成功完成的操作数也在一定程度上反应了该产品的吞吐量,下图是详细情况,纵轴表示每秒完成的操作次数(OPS),单位为:次/秒。

 

 

        

         总体来说,该测试反映出以下情况:

    1、hbase与cassandra有最好的写性能。

    2、redis有最好的读性能。

4、附录

4.1 详细数据

  本次测试得到的详细数据如下:

4.1.1  写入1000W条数据

产品

总计耗时(ms)

ops

AL(us)

失败数

HBase

1774842

5634

701

0

Cassandra

2083771

4798

204.73

0

mongodb

1834681

5450.53

180.25

0

redis

115864

8630.8

112.36

0

4.1.2  读写10W次

Type

总计耗时(ms)

ops

操作类型

AL(us)

耗时小于1ms的操作

总操作数

hbase_10w_4t

20480

4882.81

Write

13.16

49734

49745

Read

1523.39

28760

50255

hbase_10w_8t

17698

5650.35

Write

40.12

50034

50041

Read

2642.07

15454

49959

hbase_10w_16t

14880

6720.43

Write

49.64

49906

49918

Read

4441.15

1959

50082

hbase_10w_32t

26666

3750.09

Write

82.51

49871

49887

Read

16332.56

73

50113

hbase_10w_64t

22087

4526.1

Write

202.33

49886

49923

Read

26510.66

66

50045

hbase_10w_128t

23635

4229.65

Write

411.5

49812

49873

Read

55354.39

57

50095

cassandra_10w_4t

15662

6384

Write

235.7

48245

49801

Read

978.81

40294

50199

cassandra_10w_8t

22251

4494.18

Write

293.69

47666

50012

Read

3182.84

20751

49988

cassanra_10w_16t

25422

3933.6

Write

284.07

48431

49750

Read

7640.28

13326

50250

cassanra_10w_32t

26380

3790.75

Write

571.2

47003

49933

Read

15926.31

2004

50067

cassanra_10w_64t

25538

3914.48

Write

656.34

47622

50018

Read

30452.87

459

49950

cassanra_10w_128t

26211

3813.97

Write

1322.7

46743

50320

Read

55582.7

410

49648

mongodb_10w_4t

8009

12485.95

Write

345.07

48701

49784

Read

263.54

40294

50216

mongodb_10w_8t

8726

11460

Write

677.47

47306

49963

Read

660.89

46792

50037

mongodb_10w_16t

9556

10464.62

Write

1519.25

43933

49784

Read

1444.27

45380

50216

mongodb_10w_32t

12624

7921.41

Write

4399

38787

49993

Read

3496.85

39693

50007

mongodb_10w_64t

13450

7432.56

Write

9188.02

35429

49930

Read

7274.17

36024

50038

mongodb_10w_128t

17546

5697.48

Write

25402.16

30248

49701

Read

18014.58

31634

50267

redis_10w_4t

3308

30229

Write

120.26

50085

50203

Read

130.91

49706

49797

redis_10w_8t

3499

28579.59

Write

252

49142

49520

Read

261

50142

50480

redis_10w_16t

3863

25886.61

Write

599.65

45967

49973

Read

606.69

46183

50027

redis_10w_32t

7533

13274.92

Write

1975.88

3582

50388

Read

2105.88

3233

49612

redis_10w_64t

5736

17428.17

Write

2826.28

268

50179

Read

2757.48

238

49789

redis_10w_128t

3722

26858.67

Write

4479.02

117

50011

Read

4599.77

101

49957

4.2 软件版本

  l  YCSB 0.14

  l  HBase 0.90.5 (Hadoop 0.20.2)

  l  Cassandra 1.1.2

  l  mongodb 2.0.6

  l  redis 2.4.15

posted @ 2016-04-12 11:51  RyanChan  阅读(774)  评论(0编辑  收藏  举报