在网上查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”.它内置了对常见NoSQL数据库和数 ...

  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. [Luogu 3389]【模板】高斯消元法

    Description 给定一个线性方程组,对其求解 Input 第一行,一个正整数 n 第二至 n+1 行,每行 n+1 个整数,为a1,a2⋯an和 b,代表一组方程.1​​,a​2​​⋯a​n​ ...

  2. [SHOI2017]相逢是问候

    Description 信息将你我连结.B君希望以维护一个长度为n的数组,这个数组的下标为从1到n的正整数.一共有m个操作,可以 分为两种:0 l r表示将第l个到第r个数(al,al+1,...,a ...

  3. [HNOI2016]序列

    题目描述 给定长度为n的序列:a1,a2,...,an,记为a[1:n].类似地,a[l:r](1<=l<=r<=N)是指序 列:al,al+1,...,ar-1,ar.若1< ...

  4. ●POJ 1990 MooFest

    题链: http://poj.org/problem?id=1990 题解: 树状数组 把牛们按x坐标从小到大排序,依次考虑每头牛对左边和对右边的贡献. 对左边的贡献:从左向右枚举牛,计算以当前牛的声 ...

  5. 【BZOJ3631】【JLOI2014】松鼠的新家

    原题传送门 题意:给你一棵树,然后有一个遍历顺序,你需要补全这个遍历顺序,然后输出这个遍历顺序中每个点的出现次数. 解题思路:本来想找树剖的题,结果发现了一题可以直接写lca的.... 做法1:非常简 ...

  6. Hdu 5595 GTW likes math

    题意: 问题描述 某一天,GTW听了数学特级教师金龙鱼的课之后,开始做数学<从自主招生到竞赛>.然而书里的题目太多了,GTW还有很多事情要忙(比如把妹),于是他把那些题目交给了你.每一道题 ...

  7. 用js来实现那些数据结构11(字典)

    我们这篇文章来说说Map这种数据结构如何用js来实现,其实它和集合(Set)极为类似,只不过Map是[键,值]的形式存储元素,通过键来查询值,Map用于保存具有映射关系的数据,Map里保存着两组数据: ...

  8. 勤拂拭软件系列教程 - java web开发

    勤拂拭软件工作室持续推出Java Web开发系列教程与案例,供广大朋友分享交流技术经验,帮助喜欢java的朋友们学习进步: 1. 勤拂拭软件 java web 开发教程(1) - 开发环境搭建 勤拂拭 ...

  9. Linux下安装java的jdk和配置环境变量

    每次感觉配这个超级简单 但是每次都要查下 记一下好了 Linux下安装jdk,步骤如下 1:下载jdk包:本章使用的为后缀为tar.gz的文件(不需要安装),如jdk-8u111-linux-x64. ...

  10. C# 制作屏保(图片位置随机变化)

    最近无所事事,闲着无聊,在网上翻看资料时碰巧看到了屏保制作,根据大神的思路也理解到屏保也不是很难.因此根据我自己的理解,动手谢了一个屏保. 首先,打开VS2010创建一个Windows窗体应用程序,名 ...