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 条评论
登录 后参与评论

相关文章

来自专栏架构师之路

创业公司快速搭建立体化监控之路(WOT2016)

本文内容:创业型公司如何快速搭建可扩展,可落地的立体化监控平台 一、需求缘起 创业型公司有系统监控么?来看两个case: case 1:CXO大群内贴了一张“用...

3107

Apache CloudStack系统VM架构选择

最近我和一些人讨论了为什么现在有32位或64位虚拟机系统和云计算平台4.3的选择。我提供了一个答案,并链接到一些邮件列表进行讨论。我想这可能是随兴...

1759
来自专栏技术博文

Linux下常用压缩 解压命令和压缩比率对比

常用的格式有: tar, tar.gz(tgz), tar.bz2, 不同方式,压缩和解压方式所耗CPU时间和压缩比率也差异也比较大。 1. tar 只是打包...

5427
来自专栏WebHub

实现前后端分离的心得

对目前的web来说,前后端分离已经变得越来越流行了,越来越多的企业/网站都开始往这个方向靠拢。那么,为什么要选择前后端分离呢?前后端分离对实际开发有什么好处呢?

882
来自专栏人人都是极客

聊聊Linux IO(上)

如果你觉得这些问题都很简单,都能很明确的回答上来。那么很遗憾这篇文章不是为你准备的,你可以关掉网页去做其他更有意义的事情了。如果你觉得无法明确的回答这些问题,那...

2003
来自专栏phodal

从遗留技术栈升级里,我学到的八件事

几周前,当我使用 Mifa 主题刷新我的博客时,我发现了一件不得了的事情...

46810
来自专栏开源优测

移动测试入门之性能测试点

在通常情况下,移动端主要关注以下性能测试场景: 验证在不同的负载下应用程序的性能是否满足需求 验证当前网络是否支持峰值、均值、最小用户级别的应用程序 验证应用程...

2868
来自专栏知识分享

关于STM32的外部引脚中断的问题

今天想用自己以前的比较干净的工程模板做一个东西,,,,,,,在添加上引脚中断的时候,,突然想知道自己配置的中断优先级是否正确执行,,,,, 以前刚学习32的时候...

3476
来自专栏开源优测

[接口测试_B] 12 如何编写接口测试用例

1262
来自专栏魏艾斯博客www.vpsss.net

lnmp1.4 环境升级 php5.5 到 php7 的过程

1.1K3

扫码关注云+社区