YCSB数据库性能测试工具


概述

Yahoo! Cloud Serving Benchmark (YCSB) 是一个Java语言实现的主要用于云端或者服务器端的数据库性能测试工具,其内部涵盖了常见的NoSQL数据库产品,如Cassandra、MongoDB、HBase、Redis等等。
下载地址:https://github.com/brianfrankcooper/YCSB/wiki
官方地址:https://github.com/brianfrankcooper/YCSB
这个框架具有很好的可扩展性,可以通过配置文件来指定需要进行什么样的workload的测试,比如读写比例多少,每条记录多大,每个字段多大,并发数多大,进行随机选择使用的分布(比如读一条数据的时候)等。

YCSB的架构图

其中,灰色部分用户可以通过编写Java代码的方式来自己定制。

提出目的:

NoSQL数据库不支持ACID型事务,各种不同类型的OLTP(on-Line Transaction Processing)应用程序服务与传统数据库服务工作负载有很大的区别,所以不能单靠传统的标准如(TCP-C)来衡量NoSQL数据库性能

优点
  • 配置方便,源码开源。可以设置任意读写比,线程数
  • 它包括几乎所有数据库的驱动程序,并且有较强的可扩展性
  • 这是行业标准。(相当稳定且有据可查)
缺点
  • 不能自动生成测试文档
  • 没有UI操作界面,需要一定门槛
参考文献

Benchmarking Cloud Serving Systems with YCSB


安装与使用

1. 下载工具包,直接解压就可以使用,无需编译和安装。

环境需求:java,YCSB是java应用程序,所以依赖于JRE
下载地址1:https://mirrors.huaweicloud.com/kunpeng/archive/kunpeng_solution/native/YCSB-0.15.0.zip
下载地址2:https://github.com/brianfrankcooper/ YCSB /releases/download/0.17.0/ycsb-0.17.0.tar.gz

2. 将下载的压缩包解压,并打开。

解压后

主要目录说明:

  • 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
  • workload_template:参数列表模板。
3. 压测配置。

选择需要测试的测试场景,编辑对应的配置文件,以读写均衡型测试workloada为例:


参数配置
参数项 参数具体含义
recordcount YCSB load阶段加载的记录条数
operationcount YCSB run阶段执行的操作总数
workload workload实现类
readallfields 查询时是否读取记录的所有字段
readproportion 读操作的百分比
updateproportion 更新操作的百分比
scanproportion 插入操作的百分比
requestdistribution 请求分布模式,uniform, zipfian, latest三种分布模式
mongodb.url 待测试mongo实例的连接地址 (注:此为添加项)
mongodb.database 测试时使用的数据库名称,默认ycsb(注:此为添加项)
4. 加载数据

bin\ycsb load mongodb -threads 100 -P workloads\workloada
返回字段Return=OK,则表示数据导入成功。

命令参数说明:
ycsb [command] [database] [options]

  • command选项:
    load:载入测试数据。
    run:执行测试过程。
    shell:交互模式。
  • database选项:指定测试的数据库场景,例如mongodb, cassandra, memcached等。
  • options选项:
    -P file :指定workload文件,相对路径或者绝对路径。
    -cp path :指定额外的Java classpath。
    -jvm-args args :指定额外的JVM参数。
    -p key=value :设置ycsb配置项,会覆盖workload文件的配置项。
    -s :运行时的中间状态打印到stderr中。
    -target n :表示1s中总共的操作次数。
    -threads n :设置ycsb client的并发测试线程数,默认是1,单线程。
5. 执行测试

bin\ycsb run mongodb -threads 100 -P workloads\workloada
返回字段Return=OK,则表示测试完成,取“[OVERALL],Throughput”值作为测试指标。
测试结果分析
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数据库性能测试工具)