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

NoSql研究报告的更多相关文章

  1. NoSql数据库使用半年后在设计上面的一些心得

    NoSql数据库这个概念听闻许久了,也陆续看到很多公司和产品都在使用,优缺点似乎都被分析的清清楚楚.但我心里一直存有一个疑惑,它的出现究竟是为了解决什么问题? 这个疑惑非常大,为此我看了很多分析文章, ...

  2. 非关系型数据库(NoSql)

    最近了解了一点非关系型数据库,刚刚接触,觉得这是一个很好的方向,对于大数据 方面的处理,非关系型数据库能起到至关重要的地位.这里我主要是整理了一些前辈的经验,仅供参考. 关系型数据库的特点 1.关系型 ...

  3. 关系型数据库与NoSQL数据库

    关系型数据库的优缺点 优点: 可以做事务处理,从而保证了数据的一致性: 可以进行JOIN等多表查询: 由于以SQL标准化为前提,数据更新的开销很小(相同的字段基本上都只有一处). 缺点: 大量数据的写 ...

  4. 2016年中国微信小程序专题研究报告

    2016年12月29日,全球领先的移动互联网第三方数据挖掘和分析机构iiMedia Research(艾媒咨询)权威首发<2016年中国微信小程序专题研究报告>. 报告显示,82.6%手机 ...

  5. 几款主流 NoSql 数据库的对比

    最近小组准备启动一个 node 开源项目,从前端亲和力.大数据下的IO性能.可扩展性几点入手挑选了 NoSql 数据库,但具体使用哪一款产品还需要做一次选型. 我们最终把选项范围缩窄在 HBase.R ...

  6. “NOSQL” 杂谈

    引言: nosql 的兴起和革命,在我看来已经开始逐渐影响到了传统的sql的地位,但是仅仅是影响而已,取代是不太可能的. 正文: 两年前,一个偶然的机会开始接触到 nosql ( mongodb ). ...

  7. Squirrel: 通用SQL、NoSQL客户端

    安装 配置数据库 配置驱动 配置连接 如果你的工作中,需要使用到多个数据库,又不想在多种客户端之间切换来切换去.那么就需要找一款支持多数据库的客户端工具了.如果你要连接多个关系型数据库,你就可以使用N ...

  8. NoSQL和MongoDB

     NoSQL(NoSQL=Not Only SQL),意即“不仅仅是SQL”.关系数据库关注在关系上,NoSQL关注在存储上. 发展背景 (1)传统关系型数据库遇到了性能瓶颈. 高并发读写(High ...

  9. NoSQL指南

    一.数据库发展 1.早期出现的数据库包括平面文件数据管理系统.分层数据管理系统和网络数据管理系统,分别对应的数据结构是线性表.树和图. 平面文件数据管理系统是使用磁带对数据进行顺序存储的,带来的问题不 ...

随机推荐

  1. INSTALL_FAILED_UPDATE_INCOMPATIBLE

    安装apk的时候,报错. 解决:把所有这个apk的相关信息删除干净,隐藏较深的是设置->应用管理->这个应用的相关信息删除干净就可以了

  2. sql2000/sql2005/sql2008数据库变为0字节修复/MDF文件0字节恢复

    [数据恢复故障描述]  这个客户是生产型数据库,数据比较重要,产生量也比较大,客户要求必须尽快修复,保证生产尽快恢复运行.sql数据库文件,由于碎片链接过长,mdf文件突然变为0字节,开始客户尝试自行 ...

  3. php 利用socket上传文件

    php 利用socket上传文件 张映 发表于 2010-06-02 分类目录: php 一,利用fsockopen来上传文件 以前我写过一篇关于socket通信原理的博文http://blog.51 ...

  4. 4、安卓数据存储——sqlite

    朋友圈里的每一个消息体里面的数据,当下拉刷新从服务器下载数据包后,存入sqlite:用户名.图片url.点赞.评论等等.上拉加载的时候,从数据库里取出最近的5条数据加载到朋友圈上. Android通过 ...

  5. java系列--类和对象

    一.成员属性,构造方法,成员方法 1.类名首字母一般大写 2.方法名的首字母一般是小写,使用驼峰法(匈牙利法) myCry, 下划线法 my_cry 3.方法的声明没有函数体(接口,抽象类),数据类型 ...

  6. 如何备份、还原或迁移 WhatsApp 的信息和资料?

    WhatsApp 会在每天清晨 2 点钟自动创建本地备份文件并将备份文件存储在手机系统设置的文件夹中. Google 云端硬盘 您可以备份对话记录和媒体到 Google 云端硬盘以便日后更换手机时仍可 ...

  7. Ubuntu切换默认语言

    不得不说,从Ubuntu到Debian,又到CentOS 7,我胡汉三又回来了... 然后又装了个中文版的Ubuntu16.04LTS,不得不说,Ubuntu对中文的支持真的很好 不过,还是不太习惯, ...

  8. java中的double

    代码如下: Double d1 = 0.35; Double d2 = 0.1; System.out.println(d1+d2); 结果很不幸不是0.45,而是0.4499999999999999 ...

  9. thinkphp 3.2 导入第三方类库的两种方式

    第一种

  10. Android中SharedPreferences介绍和使用方法

    1.SharedPreferences简介 为了保存软件的设置参数,Android 平台为我们提供了一个SharedPreferences 类,它是一个轻量级的存储类,特别适合用于保存软件配置参数.使 ...