YCSB源码分析

1. 整体结构

ycsb的源代码可以直接从github进行下载,地址:https://github.com/brianfrankcooper/YCSB,基本使用说明文档地址:https://github.com/brianfrankcooper/YCSB/wiki。根据官方给出的文档,基本上可以对ycsb进行简单的使用。但要进一步理解ycsb的执行过程和相关参数的含义,还是需要对代码进行分析。

从github上下载的代码可以直接导入到eclipse中,导入后会发现,整个ycsb工程包含了许多子工程,一眼看上去有点混乱,其实所有的子工程可以分为两类:core和其它。顾名思义,core是整个ycsb工程的核心,负责负载的产生;其它子工程分别实现了相关数据库的接口(core中的DB类和BasicDB类)。所以在真正理解ycsb的执行过程时,主需要查看core子工程即可。

2. YCSB执行过程

0. 以下分析都是在core子工程内进行;

1. 程序入口:com.yahoo.ycsb.Client.java,主要完成参数的解析,初始化workload,创建三个对等的线程:clientThread、statusThread、TerminatorThread;

2. workload:缺省情况下创建coreWorkload,核心对象包括:keychooser、operationchooser,其中operationchooser对象选取下一个Op的类型,keychooser选取下一个key的值;

3. ClientThread:clientThread的个数通过命令行设置,一个clientThread单独占用一个DB,clientThread执行Op;

5. StatusThread:打印YCSB运行信息的线程,缺省情况下sleeptime=10000ms,即每10s输出一次运行情况,当所有Op执行完时,线程结束;

6. TerminatorThread:终止YCSB执行的线程,通过设置最大执行时间实现,当执行时间超过最大时限时,该线程设置workload停止请求;

7. Generator类结构

YCSB源码分析_第1张图片

Generator类是真正的控制key的分布的类,根据设置的区间和分布生成key,具体实现还得自己查阅相关代码。

3. 利用YCSB-core构造自己的benchmark

通过2部分的分析不难发现,core子工程是可以独立运行的。笔者自己在运行ycsb的时候,非常反感的就是整个YCSB异常庞大,而且增加自己的接口也十分复杂(具体的方法可以参加另一篇文章:YCSB使用说明)。事实上,我们完全可以在core子工程的基础上实现自己的轻量级的benchmark,只需要实现core中的DB定义的接口,然后指定运行的DB类即可。具体实现可以参考:https://github.com/martji/rmemcached/tree/master/ycsbCore,以Memcached为例实现的轻量级benchmark。

你可能感兴趣的:(YCSB源码分析)