zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Uploadify v3.2.1 上传图片并预览
    mybatis批量操作
    500 拦截错误输出
    jsnop
    java目录
    设置360调用样式 IE调用样式
    Spring加载resource时classpath*:与classpath:的区别
    context:annotation-config 与context:component-scan
    Andriod调用http请求
    JDK环境变量
  • 原文地址:https://www.cnblogs.com/ryanchancrj/p/6437907.html
Copyright © 2011-2022 走看看