在网上查In-Memory NoSQL性能测试的资料时,偶然间发现了这个性能测试工具YCSB,全称为“Yahoo! Cloud Serving Benchmark”。它内置了对常见NoSQL数据库和数据网格产品的支持,如Cassandra、MongoDB、HBase、Redis、Infinispan等等很多的主流产品,而且不仅安装使用简单,还能自由扩展测试数据类型和支持的数据库产品。

1 编译安装

首先说一下YCSB的安装。直接下载tar.gz分发包的话其实也不需要安装什么,解压后通过bin目录下的脚本执行即可(依赖python和JRE)。但由于tar.gz分发包比较大,一百多M,而且我这里总是连接超时,于是直接下载master库的源代码,自己编译。编译方法也很简单,因为工程是Maven管理的,所以只要有Maven环境就可以直接在YCSB根目录下运行package任务,之后就能在distribution工程的target中看到ycsb-0.1.4.tar.gz。最后将编译出的包拷贝到自己的环境如虚拟机里,就能使用了。本机调试也是可以的,只需在IDE中配置好Client.main()方法的启动参数就行了。

2 使用

现在来说一下如何使用YCSB,以Redis的性能测试为例,分为1.初始化测试数据 (loading阶段)和2.执行测试操作(transaction阶段)。首先进行初始化,先保证Redis服务已经启动,然后在YCSB根目录下执行:

> bin/ycsb load redis -s -P workloads/workloada -p "redis.host=127.0.0.1" -p "redis.port=6379"

之后我们在Redis中就能看到1000条数据,因为workloada中定义了recordcount=1000。每一个key都是hash类型,我们可以重执行上面的命令,将redis改为basic,basic是一种dummy客户端,实际并不操作任何数据库,而是将YCSB对数据库的各种操作的key-value输出到控制台,这样我们就能看到这些key-value是怎么插入到Redis的,value都是什么样子的了。

继续开始真正的测试:

> bin/ycsb run redis -s -P workloads/workloada -p "redis.host=127.0.0.1" -p "redis.port=6379" \

-threads 128 -p "operationcount=10000" -p "measurementtype=timeseries" \

-p "timeseries.granularity=5000"

简单解释一下这些参数:-threads是模拟的线程数,-p是传入的参数,可以是客户端的参数,可以是YCSB内部组件的参数,例如measurementtype会配置Measurements输出时间序列而不是直方图,也可以覆盖workload文件中预定义的参数,例如上面的operationcount。还有一个常用的参数是-target,指的是每秒最大操作数,当一秒内到达这个阈值,线程就会休眠1毫秒。

输出的内容大概是这个样子,主要关注总的执行时间、吞吐量,以及读和写的平均延迟:

[OVERALL], RunTime(ms), 60058.0

[OVERALL], Throughput(ops/sec), 27049.768557061507

[UPDATE], Operations, 812803

[UPDATE], AverageLatency(us), 2275.102034564341

[UPDATE], MinLatency(us), 616

[UPDATE], MaxLatency(us), 64614

[UPDATE], Return=0, 812800

[UPDATE], 0, 4529.805933250927

[UPDATE], 5000, 2208.521014693651

[UPDATE], 10000, 2148.7565276549426

[UPDATE], 15000, 2139.8536001184116

[UPDATE], 20000, 2205.0305368941204

[UPDATE], 25000, 2165.1238092653402

[UPDATE], 30000, 2180.7067298448014

[UPDATE], 35000, 2188.5334523973074

[UPDATE], 40000, 2145.7207987586858

[UPDATE], 45000, 2199.350677041509

[UPDATE], 50000, 2175.385860213585

[UPDATE], 55000, 2156.2515744608663

[READ], Operations, 811752

[READ], AverageLatency(us), 2304.3717539346994

[READ], MinLatency(us), 629

[READ], MaxLatency(us), 75380

[READ], Return=0, 811751

[READ], 0, 4634.609504308506

[READ], 5000, 2233.603889043769

[READ], 10000, 2179.2526166711627

[READ], 15000, 2165.0853859227886

[READ], 20000, 2234.4603871649133

[READ], 25000, 2178.2390324907783

[READ], 30000, 2208.70719241602

[READ], 35000, 2207.444112422369

[READ], 40000, 2173.767667054904

[READ], 45000, 2223.0628439478996

[READ], 50000, 2200.857439151695

[READ], 55000, 2178.257027425664

3 源码分析

YCSB的核心类都在Maven子模块core中,主要有Client、ClientThread、CoreWorkload、DB实现类等。

其主流程是:python脚本bin/ycsb会调用Client类的main()方法,初始化Workload和DB的实现类,并根据-threads参数创建多个Client线程,-s参数创建一个Status线程。每个线程会循环recordcountoperationcount(在workloada中定义)除以threads次,并根据参数bin/ycsb load/run决定是初始化数据doInsert()还是执行读写操作doTransaction()。

4 添加新数据库

1.新建module:在YCSB根目录pom.xml下添加一个Maven子module,artifactId为xxx-binding(ycsb脚本会根据这个名字后缀扫描jar包,加入到classpath中),而目录名则为前缀xxx。

2.配置pom.xml:打开新建子module的pom.xml,加入<build>一段,这样执行package任务后会在target目录下生成一个包含了所有依赖的大jar包,这是maven-assembly插件的功能。之后将core模块(因为下面我们要继承DB类)和其他所有依赖项添加到pom.xml中。

3.新建DB子类:在此子module中新建package和类,继承DB类。

4.打包module:执行package任务,在target下会生成一个xxx-binding.jar。拷贝到YCSB包下xxx-binding/lib目录下。

5.执行测试:可以通过-db指定我们的DB类,或在ycsb Python脚本中给我们的类加个别名。

YCSB性能测试工具使用(转)的更多相关文章

  1. YCSB性能测试工具使用

    在网上查In-Memory NoSQL性能测试的资料时,偶然间发现了这个性能测试工具YCSB,全称为"Yahoo! Cloud Serving Benchmark".它内置了对常见 ...

  2. NoSQL性能测试工具YCSB-Running a Workload

    写在前面 目前,在系统设计中引入了越来越多的NoSQL产品,例如Redis/ MongoDB/ HBase等,其中性能指标往往会成为权衡不同NoSQL产品的关键因素.对这些产品在性能表现和产品选择上的 ...

  3. 性能测试工具 wrk 安装与使用

    介绍 今天给大家介绍一款开源的性能测试工具 wrk,简单易用,没有Load Runner那么复杂,他和 apache benchmark(ab)同属于性能测试工具,但是比 ab 功能更加强大,并且可以 ...

  4. 性能测试工具Locust

    An open source load testing tool. 一个开源性能测试工具. define user behaviour with python code, and swarm your ...

  5. 给CentOS6.3 + PHP5.3 安装PHP性能测试工具 XHProf-0.9.2

    一.什么是XHProf XHProf官网:http://pecl.php.net/package/xhprof XHProf是一个分层PHP性能分析工具.它报告函数级别的请求次数和各种指标,包括 阻塞 ...

  6. Android性能测试工具APT使用指南

    腾讯的安卓平台高效的性能测试工具APT(Android Performance Testing Tools),适用于开发自测和定位性能瓶颈,帮助测试人员完成性能基准测试.竞品测试. APT提供了CPU ...

  7. 安卓性能测试工具-GT,安测试

    GT: 是腾讯出品的一款APP的随身调测平台,它是直接运行在手机上的“集成调测环境”(IDTE,  Integrated  Debug&Test  Environment).利用GT,仅凭一部 ...

  8. TCP/UDP网络性能测试工具 - Netperf (zz) ..网络测试工具

    在构建或管理一个网络系统时,我们更多的是关心网络的可用性,即网络是否连通,而对于其整体的性能往往考虑不多. 除了netperf以外.       还有很多其它的网络性能测试工具.       如db, ...

  9. pylot是一款开源的web性能测试工具

    pylot是一款开源的web性能测试工具,http://www.pylot.org/ 参考文档:http://www.pylot.org/gettingstarted.html很容易上手 使用分为以下 ...

随机推荐

  1. etcd 命令行(转)

    原文 https://www.cnblogs.com/breg/p/5756558.html 比较重要的配置 -name 节点名称,默认是UUID-data-dir 保存日志和快照的目录,默认为当前工 ...

  2. vue vue-resource 请求数据

    main.js import Vue from 'vue'; import App from './App.vue'; /*使用vue-resource请求数据的步骤 1.需要安装vue-resour ...

  3. UI相关教程:HUD、UMG和Widget

    转自:http://aigo.iteye.com/blog/2258612 蓝图脚本来处理 ================================================== 用UM ...

  4. (转)App.Config详解及读写操作

    App.Config详解 应用程序配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的.它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而不必重编译应用程序.配置文件的根节点是c ...

  5. navicat创建存储过程的小问题

    再简单的东西长时间不用了就会出错,特此即时的记录下来,以便以后参考! 转自:http://blog.csdn.net/winy_lm/article/details/49690633 以下为navic ...

  6. Flume+HBase+Kafka集成与开发

    先把flume1.7的源码包下载 http://archive.apache.org/dist/flume/1.7.0/ 下载解压后 我们通过IDEA这个软件来打开这个工程 点击ok后我们选择打开一个 ...

  7. ORACLE和MYSQL的简单区别

    1,Oracle没有offet,limit,在mysql中我们用它们来控制显示的行数,最多的是分页了.oracle要分页的话,要换成rownum. 2,oracle建表时,没有auto_increme ...

  8. python学习过程中的踩坑记录<若干,随时更新>

    问题1:python中print的连串输出与java不一样? 输入print(code +"+++"); --在代码中写入,界面未报错,但是告诉你不行 会报错,如图: 解决办法: ...

  9. python中使用tabula爬取pdf数据并导出表格

    Tabula是专门用来提取PDF表格数据的,同时支持PDF导出CSV.Excel格式. 首先安装tabula-py: tabula-py依赖库包括Java.pandas.numpy所以需要保证运行环境 ...

  10. SVG:中国地图

    中国地图 <svg height="578" version="1.1" width="718" xmlns="http:/ ...