如何使用YCSB对mongodb数据库进行性能测试

        最近接到一个活需要对mongodb数据库的写入进行性能测试,之前从未接触过这方面的东西,经过一番搜索后发现了YCSB(全称为Yahoo! Cloud Serving Benchmark,github地址GitHub - brianfrankcooper/YCSB: Yahoo! Cloud Serving Benchmark),该性能测试工具由Java语言编写,主要用于云端或者服务器端的数据库性能测试工具,其内部涵盖了常见的NoSQL数据库产品,如Cassandra、MongoDB、HBase、Redis等等,在此记录一下过程

1.环境搭建

YCSB需求的环境为:

  • Java
  • Maven
  • Python2(一定要使用python2,YCSB不支持python3)

首先安装java

sudo apt install openjdk-11-jdk

安装maven

sudo apt install maven

安装python2并设置为默认版本

sudo apt-get install python2
sudo ln -s /usr/bin/python2.7 /usr/bin/python

下载YCSB并解压

wget https://github.com/brianfrankcooper/YCSB/releases/download/0.17.0/ycsb-0.17.0.tar.gz
tar xfvz ycsb-0.17.0.tar.gz
cd ycsb-0.17.0

2.测试

在ycsb目录下有workloads目录,该目录下有workloada、workloadb、workloadc等几个预设测试场景,分别为:

  • workloada:读写均衡型,50%/50%,Reads/Writes
  • workloadb:读多写少型,95%15%,Reads/Writes
  • workloadc:只读型,100%,Reads
  • workloadd:读最近写入记录型,95%15%,Reads/insert
  • workloade:扫描小区间型,95%/5%,scan/insert
  • workloadf:读写入记录均衡型,50%/50%,Reads/insert

其中的参数含义为

参数含义
recordcount=1000YCSB load(加载元数据)命令的参数,默认值1000表示默认加载的记录条数,可以在命令行显示修改该值
operationcount=1000YCSB run(运行压力测试)命令的参数,默认值1000表示默认选取数据库中的1000条数据进行压力测试。对于workloada这种测试场景,就意味着读数据在500左右,写数据也在500左右
workload=site.ycsb.workloads.CoreWorkload指定了workload的实现类为 com.yahoo.ycsb.workloads.CoreWorkload
readallfields=true表示查询时是否读取记录的所有字段
readproportion=0.5表示读操作的比例,该场景为0.5
updateproportion=0.5表示更新操作的比例,该场最为0.5
scanproportion=0表示扫描操作的比例
insertproportion=0表示插入操作的比例
requestdistribution=zipfian表示请求的分布模式,YCSB提供uniform,zipfian,latest三种分布模式,Uniform(等概率随机选择记录)、Zipfian(随机选择记录,存在热纪录)和Latest(近期写入的记录是热记录)

可以根据自己的需求去设置测试场景参数,设置好后就可以使用命令去执行了,例如

./bin/ycsb run mongodb -threads 1 -P workloads/workloada -p mongodb.url=mongodb://localhost:27017/test?w=0

命令参数含义

参数含义
bin/ycsb命令本身
load/run/shell指定这个命令的作用,分别代表加载数据/运行测试/交互界面
mongodb/hbase10/ba
sic...
指定这次测试使用的驱动,也就是这次究竟测的是什么数据库,有很多选项,可以ycsb --help看到所有
threads线程数,模拟客户端数
workloads/workloada指定测试的参数文件,默认有6种测试模板
-p fieldcount=1单条记录字段个数:1
-p fieldlength=1024每个字段的大小:1024Bytes
-p table=自定义表名
-p clientbuffering=true客户端写缓存
-p mongodb.url=指定测试的数据库的认证信息,账号密码,地址端口和库名

执行完成后会输出结果

各行的含义为

参数说明
RunTime(ms):运行总时间(毫秒)
Throughput(ops/sec):吞吐量,每秒操作数
[TOTAL_GCS_PS_Scavenge], Count:Parallel Scavenge 回收次数
[TOTAL_GC_TIME_PS_Scavenge], Time(ms):Parallel Scavenge 回收时间
[TOTAL_GC_TIME_%_PS_Scavenge], Time(%):Parallel Scavenge 回收时间百分比
[TOTAL_GCS_PS_MarkSweep], Count:PS MarkSweep 回收次数
[TOTAL_GC_TIME_PS_MarkSweep], Time(ms):PS MarkSweep 回收时间
[TOTAL_GC_TIME_%_PS_MarkSweep], Time(%):PS MarkSweep 回收时间百分比
[TOTAL_GCs], Count:全局 GC 次数
[TOTAL_GC_TIME], Time(ms):全局 GC 时间
[TOTAL_GC_TIME_%], Time(%):全局 GC 时间百分比
Operations总操作数
AverageLatency(us)平均延迟(微秒)
MinLatency(us)最小延迟(微秒)
MaxLatency(us)最大延迟(微秒)
95thPercentileLatency(us) :95%的样本延迟低于该值
99thPercentileLatency(us)99%的样本延迟低于该值
Return=OK  结果(正确),总操作数

  • 22
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值