YCSB扩展-语句执行频率,执行指定的测试查询语句
2016-03-18 16:29
501 查看
引言
ycsb是雅虎开源的一款通用的性能测试工具,该工具的特点是小巧,灵活,扩展性强。网上已经有很多有关ycsb使用的介绍如文献[1-2]。文献[3 ]为ycsb git中的官方文档,包含了ycsb的使用,配置文件各参数的详细说明。文献[4 ]使用ycsb对HBASE进行测试,并通过修改原代码,达到了符合自身的测试要求。本文使用ycsb对MongoDB数据库进行测试,并扩展其原代码使ycsb支持了如下功能:(1)支持测试语句执行的时间频率,即每隔一定的时间执行一条语句;(2)执行指定的sql语句ycsb简单分析
ycsb-properties展示了配置文件各参数的说明,其中target参数表示指的是每秒最大操作数,当一秒内到达这个阈值,线程就会休眠1毫秒。显然,ycsb并没有很好的支持每隔一定时间执行一条语句的功能。并且ycsb执行的语句时ycsb系统设置好的语句,用户并不能指定特殊的语句执行。以上两个问题是本文要解决的问题。背景介绍
本事测试的数据库为MongoDB,所以出现的代码均为与测试MongoDB的代码相关。并只修改了读操作。对于其他操作大家举一反三吧。问题解决
配置文件workloada:mongodb.url=mongodb://10.0.0.1:27017 #mongodb的连接机制 mongodb.database=test #测试的数据库名 table=test #集合名 mongodb.writeConcern=normal timeseries.granularity=200 #每隔200毫秒打印一次信息 operationcount=1000 #执行10000条语句 delaytime=200 #每隔200毫秒执行一条数据,ycsb并没有该数据,是作者自己加的 readallfields=true measurementtype=timeseries workload=com.yahoo.ycsb.workloads.CoreWorkloadMY #自己编写的查询类,系统默认为CorWorkload readproportion=1 #只进行读操作 updateproportion=0 scanproportion=0 insertproportion=0 requestdistribution=zipfian
CoreWorkloadMY类。在ycsb-master\core\src\main\java\com\yahoo\ycsb\workload\文件夹下增加CoreWorkloadMY类。CoreWorkloadMY类基于CoreWorkload类进行了修改,代码只展示了增加和修改的地方,其他与CoreWorkload类相同。
public class CoreWorkloadMY extends Workload{ /** * 默认延迟时间 */ public static final String DELAYTIME_PREFIX_DEFAULT = "0"; /** * 延迟时间 */ int delayTime; public void init(Properties p) throws WorkloadException { delayTime = Integer.parseInt(p.getProperty(DELAYTIME_PREFIX, DELAYTIME_PREFIX_DEFAULT)); } public void doTransactionRead(DB db) { int keynum = 0; String keyname = ""; HashSet<String> fields = null; db.read(table, keyname, fields, new HashMap<String, ByteIterator>()); try{ Thread.sleep(delayTime); } catch (InterruptedException e){ e.printStackTrace(); } } }
MongoDbClient类修改,由于CoreWorkloadMY中的db是MongoDbClient的实体对象,因此MongoDbClient类中的read操作同样需进行修改,同样,下面代码只展示了修改的部分,其他部分与原有的MongoDbClient代码相同。该文件位置在ycsb-master\mongodb\src\main\java\com\yahoo\ycsb\db下。
public class MongoDbClient extends DB { public int read(String table, String key, Set<String> fields, HashMap<String, ByteIterator> result) { com.mongodb.DB db = null; try{ db = mongo.getDB(database); db.requestStart(); DBCollection collection = db.getCollection(table); DBObject queryResult = null; queryResult = collection.findOne(); //这里写自己的特定的查询语句 return queryResult != null ? 0 : 1; } catch (Exception e){ System.err.println(e.toString()); return 1; } finally { if (db!=null) { db.requestDone(); } } } }
完后,使用maven打包、发布就可以使用了。
参考文献
使用YCSB测试MongoDB的微分片性能使用YCSB测试Mongodb性能的方法简介
ycsb gib官网
使用YCSB对HBASE进行测试
相关文章推荐
- 分享微信开发Html5轻游戏中的几个坑
- 如何在 Fedora 上安装 MongoDB 服务器
- PHP添加yaf xhprof mongodb 同理
- mongodb安装
- 如何在 Ubuntu 上安装 MongoDB
- 信息安全聚合 Sec-News 的重构之路
- C#、ASP.NET通用扩展工具类之TypeParse
- Lua编程示例(二):面向对象、metatable对表进行扩展
- Windows Powershell扩展类型系统
- perl操作MongoDB报错undefined symbol: HeUTF8解决方法
- C#、ASP.NET通用扩展工具类之LogicSugar
- SQL Server下几个危险的扩展存储过程
- jQuery 学习第七课 扩展jQuery的功能 插件开发
- 运行Node.js的IIS扩展iisnode安装配置笔记
- 基于MySql的扩展功能生成全局ID
- jquery通过扩展select控件实现支持enter或focus选择的方法
- C#中使用1.7版本驱动操作MongoDB简单例子
- 使用zabbix监控mongodb的方法
- Node.js的MongoDB驱动Mongoose基本使用教程
- MongoDB系列教程(四):设置用户访问权限