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

1,142 阅读3分钟
原文链接: www.qcloud.com

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

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

1. YCSB 简介

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 对数据库系统进行基准测试的大致流程。针对具体的数据库系统,具体的测试步骤如何进行,我们在后续的文章中再来介绍。

参考资料

github.com/brianfrankc…
github.com/brianfrankc…