YCSB:雅虎推出的云数据库基准测试套件

大数据、云计算时代,出现了许多新型的数据库类型,包括 Redis、MongoDB、HBase、Couchbase等,各个数据库的特性各有千秋,而且如今各家云厂商提供数据库时,都会进行一些调优,比较起来比较困难。

这时就需要一套标准化的测试工具,为此雅虎在 2010 年推出了 YCSB(Yahoo Cloud Serving Benchmark,雅虎云服务基准测试),提供了一个标准的框架和工作负载集,可以便捷地比较不同「键-值」存储数据库和云数据库的性能。YCSB 于 2010 年开源,目前的版本为 0.13.0 。

1. YCSB 简介

YCSB 项目包括两大块:

  1. YCSB 客户端:可扩展的工作负载生成器。
  2. 核心负载:一组工作负载场景,由负载生成器执行。

我们可以利用 YCSB 对多个数据库运行基准测试,然后进行对比。一般来说,可以在相同硬件配置下安装多个数据库,每个数据库执行相同的工作负载。之后就可对测试结果进行数据可视化,判断哪个的性能更好。

2. YCSB 安装

安装过程比较简单,官方已经提供了编译好的二进制包。

curl -O --location https://github.com/brianfrankcooper/YCSB/releases/download/0.12.0/ycsb-0.12.0.tar.gz
tar xfvz ycsb-0.12.0.tar.gz
cd ycsb-0.12.0

执行方式如下:

./bin/ycsb

3. 运行工作负载

运行工作负载,主要包括六个步骤:

  1. 设置好测试数据库系统
  2. 选择合适的数据库接口层
  3. 选择合适的工作负载
  4. 选择合适的运行时参数(客户端线程数、目标吞吐量等)
  5. 加载数据
  6. 执行工作负载

接下来,简要介绍一下每步操作中可能要注意的一些问题。

3.1 设置好测试数据库系统

数据库系统可以配置在单机或集群上,根据希望测试的场景选择。在 YCSB 客户端运行之前,必须先创建数据表,因为客户端不会主动请求创建。

3.2 选择合适的数据库接口层

数据库接口层是一个 Java 类,负责执行 YCSB 客户端生成的读取、插入、更新、删除等操作,并转换成对应数据库的 API 情况。运行 YCSB 客户端时,需要在客户端指定类的名称,而且命令行中设置的参数会传入到数据库实例中。

3.3 选择合适的工作负载

工作负载定义了加载阶段(loading phase)中要加载到数据库中的数据,以及事务阶段(transaction phase)阶段将要对数据集执行的操作。

通常,工作负载由以下组件构成:

  • Workload 类(com.yahoo.ycsb.Workload的子类)
  • 参数文件

3.4 选择合适的运行时参数

选择好工作负载类型后,可能还需要指定一些具体的参数,这些参数可以通过命令行提供,包括:

  • threads:客户端线程数。客户单默认执行单一工作者进程。
  • target:每秒操作的目标数量。客户端默认会执行尽可能多的操作。
  • status:对于运行时间较长的负载,客户端定期报告状态很有必要,可以显示测试是否崩溃。

3.5 加载数据

工作负载有两个执行阶段:加载阶段(定义插入哪些数据),以及事务阶段(定义对数据集执行哪些操作)。如需加载数据,要运行 YCSB 客户端,让其执行加载阶段。

例如,加载标准的测试数据集:

$ ./bin/ycsb load basic -P workloads/workloada

3.6 执行工作负载

加载好数据之后,即可执行工作负载。具体来说,就是让客户端运行工作负载的事务部分,示例命令如下:

$ ./bin/ycsb run basic -P workloads/workloada -P large.dat -s > transactions.dat

这里,我们通过 run 参数,让客户端运行事务部分,而不是数据加载部分。

以上是使用 YCSB 对数据库系统进行基准测试的大致流程。针对具体的数据库系统,具体的测试步骤如何进行,我们在后续的文章中再来介绍。

参考资料

https://github.com/brianfrankcooper/YCSB

https://github.com/brianfrankcooper/YCSB/wiki/Running-a-Workload

原创声明,本文系作者授权云+社区-专栏发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

大分区表的手工并行优化

这段时间饱受大分区表的性能之苦,碰到最大的一个分区表有1个t左右,操作起来每个细节都需要格外小心,我这次和大家分享的案例应用的分区表不是很大,有80G左右。但是...

2754
来自专栏Java Web

Java 面试知识点解析(五)——网络协议篇

在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Jav...

3499
来自专栏FreeBuf

开源BTS产品中存在多处漏洞,攻击者或可劫持手机通讯基站

前言 在过去的几周时间里,我从多个方面对GSM的安全性进行了调查和研究,例如GSM通信协议中存在的漏洞。除此之外,我还对目前世界上应用最为广泛的BTS软件进行了...

1867
来自专栏FreeBuf

有趣的闪存:通过实践分析意外内存泄漏

写在前面的话 在这篇文章中,我们将对闪存进行分析。我的实验目标是一台别人“捐赠”过来的Netcomm N300路由器,在进行了深入研究之后,我可以通过修改设备闪...

3938
来自专栏Python

nginx优化 突破十万并发

文章转载于:http://9388751.blog.51cto.com/9378751/1676821

1440
来自专栏Vamei实验室

Linux进程关系

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! Linux的进程相互之间有一定的关系。比如...

1785
来自专栏枕边书

Linux“体检”指标

前言 在“求佛保佑服务器不宕机”、“杀程序员祭天”的环境下,程序员每天可谓是战战兢兢,接到电话和短信都吓得瑟瑟发抖,为了我们的安全,及时发现服务器运行问题已不仅...

1846
来自专栏流柯技术学院

【转】nginx优化 突破十万并发

nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cpu计为8)。

962
来自专栏恰同学骚年

Hadoop学习笔记—14.ZooKeeper环境搭建

从字面上来看,ZooKeeper表示动物园管理员,这是一个十分奇妙的名字,我们又想起了Hadoop生态系统中,许多项目的Logo都采用了动物,比如Hadoop采...

662
来自专栏互联网开发者交流社区

微服务之SpringCloud基础

1095

扫码关注云+社区