1、YCSB介绍

YCSB,全称为“Yahoo!Cloud Serving Benchmark”,是雅虎开发的用来对云服务进行基础测试的工具,其内部涵盖了常见的NoSQL数据库产品,如Cassandra、MongoDB、HBase、Redis等等。在运行YCSB的时候,可以配置不同的workload和DB,也可以指定线程数&并发数等其他参数。

2、安装环境

基于参考文档(https://github.com/brianfrankcooper/YCSB/tree/master/mongodb )安装java,maven,ycsb

注意,下面工具均需要根据linux系统类型和位数下载对应的rpm包,否则安装不了。使用uname -m 可查看

2.1 安装Java

下载地址:https://www.oracle.com/java/technologies/downloads/

使用命令安装rpm包

rpm -ivh 包名

安装后如果想卸载使用命令

yum remove java -y

2.2 安装Maven

下载地址:https://maven.apache.org/download.cgi

解压工具包

tar -zxvf apache-maven-3.8.4-bin.tar.gz

将解压包的bin目录路径添加到环境变量并使修改文件立即生效

echo 'export PATH=$PATH:/root/apache-maven-3.8.4/bin' >> /etc/profile 

source /etc/profile

2.3 YCSB

下载地址:https://github.com/brianfrankcooper/YCSB/releases

解压安装包

tar -zxvf ycsb-0.5.0.tar.gz

到此,环境部署完成!

输入命令简单验证下环境是否可用

./bin/ycsb load mongodb

正常情况显示下图内容

3、YCSB主要目录说明

  • bin:目录下有个可执行的ycsb文件,是用户操作的命令行接口。ycsb主逻辑是:解析命令行、设置java环境,加载java-libs,封装成可以执行的java命令,并执行。
  • workloads:目录下有各种workload的模板,可以基于workload模板进行自定义修改。

    默认的6种测试场景如下:

    1)workloada:读写均衡型,50%/50%,Reads/Writes

    2)workloadb:读多写少型,95%/5%,Reads/Writes

    3)workloadc:只读型,100%,Reads

    4)workloadd:读最近写入记录型,95%/5%,Reads/insert

    5)workloade:扫描小区间型,95%/5%,scan/insert

    6)workloadf:读写入记录均衡型,50%/50%,Reads/insert

4、YCSB主要参数说明

命令参数

假如处于ycsb工具目录下,命令格式如下:

./bin/ycsb command database [options]
  • command:常用 load(用于压测前的数据准备)和 run(执行压测)
  • database:压测数据库名称
  • options:-P(指定workload文件)-p key=value(覆盖workload中属性)-threads (进程数)-s(执行过程中是否打印状态信息)

workload属性参数

  • recordcound:load阶段加载到数据库的纪录条数 (default: 0) ,run阶段操作的数据范围(注:run阶段该值不能大于load阶段的值,否则会出现 Nothing updated for key的错误,该错误会影响update操作的正确性)
  • operationcount:run阶段执行的操作总数
  • readallfields:查询时是否读取所有字段true或者读取一个字段false(default: true)
  • fieldcount: 每条记录的字段个数 (default: 10)
  • fieldlength: 每个字段的数据长度 (default: 100)
  • readproportion: 读操作比例 (default: 0.95)
  • updateproportion: 更新操作比例 (default: 0.05)
  • insertproportion: 插入操作比例 (default: 0)
  • insertstart:第一个插入值的偏移量(default: 0)
  • scanproportion: 扫描作业比例 (default: 0)
  • readmodifywriteproportion: 读取一条记录修改它并写回的比例 (default: 0)
  • requestdistribution: 请求的分布规则 uniform, zipfian or latest (default: uniform)
  • mongodb.url:待测试mongo实例的连接地址
  • mongodb.database:测试时使用的数据库名称(default: ycsb)注:该参数在实际使用过程为生效,但也不报错,版本原因?
  • table: 测试表的名称 (default: usertable)

5、压测过程

5.1 加载数据

./bin/ycsb load mongodb -s -P ./workloads/workloada -threads 100 -p insertstart=0 -p recordcount=1000000 -p readproportion=0 -p updateproportion=0 -p insertproportion=1 -p fieldcount=5 -p fieldlength=2048 -p requestdistribution=uniform -p mongodb.url=mongodb://mongouser:autotest@192.168.0.230:27017/admin -p mongodb.database=ycsb_test -p table=t1 > ./load_result.txt

上面命令是加载100W条数据,每条数据5个字段,数据长度2048。加载完后数据大小大约10GB,耗时5分钟,可以在 load_result.txt文件查看执行结果,主要用来查看执行失败时的错误。

正常执行的结果如下:

5.2 执行测试

./bin/ycsb run mongodb -s -P ./workloads/workloada -threads 100 -p recordcount=1000000 -p operationcount=1000000 -p insertstart=0 -p insertcount=0 -p readproportion=0.95 -p updateproportion=0.05 -p insertproportion=0 -p fieldcount=5 -p fieldlength=2048 -p mongodb.url=mongodb://mongouser:autotest123@192.168.0.230:27017/admin -p table=t1 > ./run_result.txt

上面命令:

  • recordcount=1000000:表示操作加载的100W条数据(该值必须小于等于加载的记录数,否则会影响update操作的准确性)
  • operationcount=1000000:表示读写共执行100W次(可以随意填写,可用来控制压测时间
  • insertcount=0,readproportion=0.95,updateproportion=0.05:表示插入数据占比0,读占比95%,更新占比5%

执行结果

结果字段说明:

  • RunTime(ms):数据加载所用时间,单位毫秒(ms)
  • Throughput(ops/sec):吞吐量,即ops(每秒操作次数)
  • Operations:操作的总次数
  • AverageLatency(us):平均响应延时,单位是微秒(us)
  • MinLatency(us):最小响应时间,单位是微秒(us)
  • MaxLatency(us):最大响应时间,单位是微秒(us)
  • 95thPercentileLatency(us):95%的操作延时,单位是微秒(us)
  • 99thPercentileLatency(us):99%的操作延时,单位是微秒(us)
  • Return=OK:成功返回数,这个值不符合测试要求,则证明测试失败.
  • [READ]开头的代表只读的操作记录,其他还有例如上面的[insert],[UPDATE]等,其他可以理解的就是字面意思,不能理解也不需要太过关注.

YCSB_对mongodb做性能测试的更多相关文章

  1. MongoDB做为一项windows服务启动

    MongoDB做为一项windows服务启动 Windows版本安装 MongoDB的官方下载站是http://www.mongodb.org/downloads,可以去上面下载最新的对应版本,有32 ...

  2. redis、memcache、mongoDB 做了对比

    from: http://yang.u85.us/memcache_redis_mongodb.pdf   从以下几个维度,对redis.memcache.mongoDB 做了对比. 1.性能 都比较 ...

  3. 用BenchmarkDotNet给C#程序做性能测试

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:用BenchmarkDotNet给C#程序做性能测试.

  4. 针对C#程序做性能测试的一些基本准则

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:针对C#程序做性能测试的一些基本准则.

  5. sysbench的安装和做性能测试

    sysbench的安装和做性能测试 http://imysql.cn/node/312 sysbench是一个模块化的.跨平台.多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况. ...

  6. Jmeter工具做性能测试 常见的错误汇总

    在Win机器上用Jmeter做性能测试,汇总下我自身遇到的错误和解决方案 java.net.BindException: Address already in use: JVM_Bind 原因分析:压 ...

  7. 使用Jmeter做性能测试

    上周刚刚做完项目的性能测试.今天整理和总结一下,随便分享给大家. 首页呢,测试前,我们是有明确的性能指标的,而且测试环境和数据都已准备好,业务分析.场景分析大家根据自己的项目系统进行分析设计,我们选用 ...

  8. Loadrunner做性能测试的主要步骤

    Loadrunner做性能测试的主要步骤: Loadrunner将性能测试过程分为计划测试.测试设计.创建VU脚本.创建测试场景.运行测试场景和分析结果6个步骤. 1) 计划测试:主要进行测试需求的收 ...

  9. springboot2.X 使用spring-data组件对MongoDB做CURD

    springboot2.X 使用spring-data组件对MongoDB做CURD 使用背景 基于快速开发,需求不稳定的情况, 我决定使用MongoDB作为存储数据库,搭配使用spring-data ...

随机推荐

  1. SQL查询:并集、差集、交集

    新建两个表进行测试: test_a ID name 1 曹操 2 郭嘉 3 孙权 4 周瑜 test_b ID name 1 刘备 2 关羽 3 张飞 4 孙权 5 周瑜 1.UNION形成并集 UN ...

  2. jQuery选择器整理+知识总结

    jQuery选择器 没有不会遗忘的知识,还是做个总结吧! 一.基本分类 jQuery选择器大致可以分为两类,基本选择器和过滤选择器,总体结构体系如下:   二.基本选择器 基本选择器又可以分为三种,分 ...

  3. 前端浅谈-Js的组成

    这里主要想详细的分析一下浏览器渲染过程,但东西比较多.所以分成多个部分. JS由三个部分组成,分别为ECMAScript.BOM.DOM. 其中BOM是浏览器层面的东西,而DOM是页面层面的东西.简单 ...

  4. netty系列之:一个价值上亿的网站速度优化方案

    目录 简介 本文的目标 支持多个图片服务 http2处理器 处理页面和图像 价值上亿的速度优化方案 总结 简介 其实软件界最赚钱的不是写代码的,写代码的只能叫马龙,高级点的叫做程序员,都是苦力活.那么 ...

  5. ios消息队列APNS实现和证书申请

    iOS消息推送的工作机制可以简单的用下图来概括: Provider是指某个iPhone软件的Push服务器,APNS是Apple Push Notification Service的缩写,是苹果的服务 ...

  6. [BUUCTF]REVERSE——[MRCTF2020]hello_world_go

    [MRCTF2020]hello_world_go 附件 步骤: 例行检查,64位程序,无壳 64位ida载入,检索程序里的字符串,有很多,直接检索flag 一个一个点过去,找到了flag 按a,提取 ...

  7. MySQL管理之道,性能调优,高可用与监控(第二版)pdf下载

    MySQL管理之道,性能调优,高可用与监控(第二版) 书中内容以实战为导向,所有内容均来自于笔者多年实践经验的总结和新知识的拓展,同时也针对运维人员.DBA等相关工作者会遇到的有代表性的疑难问题给出了 ...

  8. GDAL重投影重采样像元配准对齐

    研究通常会涉及到多源数据,需要进行基于像元的运算,在此之前需要对数据进行地理配准.空间配准.重采样等操作.那么当不同来源,不同分辨率的数据重采样为同一空间分辨率之后,各个像元不一一对应,有偏移该怎么办 ...

  9. CF1547B Alphabetical Strings 题解

    Content 我们有一个空的字符串,第 \(i\) 次操作我们可以将字母表中第 \(i\) 个字母加入字符串的最前面或最后面.我们称一个长度为 \(n\) 的字符串是合法的,当且仅当这个字符串可以通 ...

  10. Centos使用kafka自带zookeeper安装kafka

    首先要安装jdk环境 可以参考:https://www.cnblogs.com/pxblog/p/10512886.html 下载kafka 地址:http://kafka.apache.org/do ...