在网上查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. java中lamda表达式的应用

    lamda表达式主要是为了解决匿名内部类的繁琐过程 范例:简单的lamda表达式 此处使用匿名内部类 package com.java.demo; interface IMessage{ public ...

  2. Android ART、Dalvik在multidex上的差异、关联

    为提升应用运行性能,谷歌官方从5.0(api level:21)版本开始,将虚拟机运行环境默认为ART, 此处主要研究ART.Dalvik在multidex处理上的差异和关联,做了一个简单的手绘,如下 ...

  3. [COGS 2287][HZOI 2015]疯狂的机器人

    Description 题库链接 现在在二维平面内原点上有一只机器人,他每次可以选择向右走,向左走,向下走,向上走和不走(每次如果走只能走一格).机器人不能走到横坐标是负数或者纵坐标是负数的点上. 给 ...

  4. poj3728 商务旅行

    [Description]小 T 要经常进行商务旅行,他所在的国家有 N 个城镇,标号为 1,2,3,...,N,这 N 个城镇构成一棵树.每个城镇可以买入和卖出货物,同一城镇买入和卖出的价格一样,小 ...

  5. 【BZOJ2809】【APIO2012】派遣

    Background 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿. Description 在这个帮派里,有一名忍者被称之为Master.除了Master以外,每名忍者 ...

  6. Codeforces 547D Mike and Fish

    Description 题面 题目大意:有一个的网格图,给出其中的 \(n\) 个点,要你给这些点染蓝色或红色,满足对于每一行每一列都有红蓝数量的绝对值之差不超过1 Solution 首先建立二分图, ...

  7. ●POJ 2983 Is the Information Reliable?

    题链: http://poj.org/problem?id=2983 题解: 差分约束. 1).对于条件(P u v w),不难发现反映到图上就是: $dis[u]-dis[v]=w$,所以添加两条边 ...

  8. ●BZOJ 3551 [ONTAK2010]Peaks(在线)

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3551 题解: 最小生成树 Kruskal,主席树,在线 这个做法挺巧妙的...以Kruska ...

  9. hdu 2896 病毒侵袭 AC自动机(查找包含哪些子串)

    病毒侵袭 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  10. hdu 4638 树状数组 区间内连续区间的个数(尽可能长)

    Group Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...