NoSql研究报告
NoSql研究报告
1、概述
随着互联网的不断发展,信息系统的数据变得越来越多,关系型数据库逐渐面临着难以克服的障碍,主要体现在:
- 对数据库的高并发读写需求
- 对海量数据的高效率存储和访问需求
- 对数据库的高扩展性和高可用性的需求
而在大多数与海量数据相关的应用场景下,传统关系型数据库的诸多特性却显得不那么重要(例如事务、读写实时性、多表关联),因此,非关系型数据库(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 |
数据始终保持均匀分布,伸缩性较好。(通过Zookeeper定位目标Region Server,最后定位Region获取数据。Region Server扩容后,通过将自身发布到Master,Master仍保持均匀分布) |
一致性 |
弱一致性(最终一致) |
弱一致性(最终一致) |
分布式做的不太好,还在开发中 |
使用Quorum |
在数据库层只存在一份数据,具有强一致性 |
主要功能特性 |
1、json格式的查询和写入 |
1、内存数据库 |
1、是一个MVCC的系统 |
1、支持以某个范围的键值通过列查询 |
1、采用分布式架构 Map/reduce,与hadoop完美结合 |
主要应用场景 |
适用于需要动态查询支持;需要使用索引而不是 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对各产品进行以下测试:
- 使用单线程插入1000W条数据
- 分别使用4/8/16/32/64/128线程,以读写负载比例为1:1的操作模式,对每款产品执行读写总计10W次操作。
- 根据每秒成功操作数(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研究报告的更多相关文章
- NoSql数据库使用半年后在设计上面的一些心得
NoSql数据库这个概念听闻许久了,也陆续看到很多公司和产品都在使用,优缺点似乎都被分析的清清楚楚.但我心里一直存有一个疑惑,它的出现究竟是为了解决什么问题? 这个疑惑非常大,为此我看了很多分析文章, ...
- 非关系型数据库(NoSql)
最近了解了一点非关系型数据库,刚刚接触,觉得这是一个很好的方向,对于大数据 方面的处理,非关系型数据库能起到至关重要的地位.这里我主要是整理了一些前辈的经验,仅供参考. 关系型数据库的特点 1.关系型 ...
- 关系型数据库与NoSQL数据库
关系型数据库的优缺点 优点: 可以做事务处理,从而保证了数据的一致性: 可以进行JOIN等多表查询: 由于以SQL标准化为前提,数据更新的开销很小(相同的字段基本上都只有一处). 缺点: 大量数据的写 ...
- 2016年中国微信小程序专题研究报告
2016年12月29日,全球领先的移动互联网第三方数据挖掘和分析机构iiMedia Research(艾媒咨询)权威首发<2016年中国微信小程序专题研究报告>. 报告显示,82.6%手机 ...
- 几款主流 NoSql 数据库的对比
最近小组准备启动一个 node 开源项目,从前端亲和力.大数据下的IO性能.可扩展性几点入手挑选了 NoSql 数据库,但具体使用哪一款产品还需要做一次选型. 我们最终把选项范围缩窄在 HBase.R ...
- “NOSQL” 杂谈
引言: nosql 的兴起和革命,在我看来已经开始逐渐影响到了传统的sql的地位,但是仅仅是影响而已,取代是不太可能的. 正文: 两年前,一个偶然的机会开始接触到 nosql ( mongodb ). ...
- Squirrel: 通用SQL、NoSQL客户端
安装 配置数据库 配置驱动 配置连接 如果你的工作中,需要使用到多个数据库,又不想在多种客户端之间切换来切换去.那么就需要找一款支持多数据库的客户端工具了.如果你要连接多个关系型数据库,你就可以使用N ...
- NoSQL和MongoDB
NoSQL(NoSQL=Not Only SQL),意即“不仅仅是SQL”.关系数据库关注在关系上,NoSQL关注在存储上. 发展背景 (1)传统关系型数据库遇到了性能瓶颈. 高并发读写(High ...
- NoSQL指南
一.数据库发展 1.早期出现的数据库包括平面文件数据管理系统.分层数据管理系统和网络数据管理系统,分别对应的数据结构是线性表.树和图. 平面文件数据管理系统是使用磁带对数据进行顺序存储的,带来的问题不 ...
随机推荐
- FAB、TextInputLayout及Snackbar笔记
FloatingActionButton 由于FloatingActionButton是重写ImageView的,所有FloatingActionButton拥有ImageView的一切属性. 控制F ...
- ftp_get_file_and_directory
class DirectoryItem { public Uri BaseUri; public string AbsolutePath { get { return string.Format(&q ...
- Python的lambda匿名函数
lambda函数也叫匿名函数,即,函数没有具体的名称.先来看一个最简单例子: def f(x):return x**2print f(4) Python中使用lambda的话,写成这样 g = lam ...
- Grunt构建工具插件篇——之less工具3和watch配合自动化编译
grunt less转换成css速度慢 而且页面会全部刷新? 最近遇到了个问题,grunt里用less,当修改完.less里面的样式,对应 的.css文件会好几秒才修改,然后浏览器上显示也会耗时好几秒 ...
- java中常用的空判断
Java 判断字符串是否为空的四种方法: 方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低: if(s == null ||"".equals(s));方法二: 比较字 ...
- Angular - - ngIf、ngSwitch、ngHide/ngShow
在组合这些ng指令写到一篇文章里的时候,基本是有规则的,野兽把功能相似相近的一类大多会组合到一起,方便理解和记忆. 这篇的三个指令也都是对DOM元素的操作,页面上显示/隐藏的判断,添加/移除的判断. ...
- NodeMCU之旅(三):响应配置按钮
引言 在之前的代码中,要连接的WIFI信息都已写死在代码里,这显然不能适应我们的需求.所以需要想个办法让用户可以配置这些信息. WIFI工作模式 NodeMCU支持STATION,SOFTAP,STA ...
- 【BZOJ 3926】【ZJOI 2015】诸神眷顾的幻想乡
http://www.lydsy.com/JudgeOnline/problem.php?id=3926 广义后缀自动机的例题,感觉广义后缀自动机好恶心... 广义后缀自动机是对一个trie建立的后缀 ...
- Eclipse 打开文件所在文件夹
右击文件 > Show In > System Explorer
- 使用XML文件定义菜单
Android提供了两种创建菜单的方式,一种是在Java代码中创建,一种使用XML资源文件定义.上面的实例都是在Java代码中创建菜单,在Java代码中创建菜单存在如下不足. 在Java代码中定义菜单 ...