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

相关文章

来自专栏CSDN技术头条

外行人都能看懂的 Spring Cloud,错过了血亏!

这篇主要来讲讲 Spring Cloud 的一些基础知识。以下是 SpringCloud GitHub Demo ,看完文章的同学可以自己练手玩玩:

873
来自专栏别先生

一脸懵逼学习Hadoop分布式集群HA模式部署(七台机器跑集群)

1)集群规划: 主机名          IP      安装的软件                      运行的进程 master    192.168...

4129
来自专栏Hadoop实操

如何使用HiBench进行基准测试

3622
来自专栏Ryan Miao

SpringCloud学习1-服务注册与发现(Eureka)

前言 Oracle转让Java,各种动态语言的曝光率上升,Java工程师的未来在哪里?我觉得Spring Cloud让未来有无限可能。拖了半年之久的Spring...

9167
来自专栏牛肉圆粉不加葱

Apache Livy 实现思路及模块概述

关于Apache Livy(下文简称 livy)是什么以及有什么用,请移步:Livy:基于Apache Spark的REST服务

955
来自专栏惨绿少年

练习题三

第1章 练习题 1.1 第1题 取得/etc/hosts 文件的权限 如何取得/etc/hosts 文件的权限对应的数字内容,如-rw-r--r--  为 64...

1940
来自专栏鸿的学习笔记

YARN--大数据的资源管理器

最初,Hadoop主要限于范例MapReduce,其中资源管理由JobTracker和TaskTacker完成。JobTracker将MapReduce任务传播...

742
来自专栏玄魂工作室

Burp Suite详细使用教程-Intruder模块详解

小编:Burp Suite是一个Web应用程序集成攻击平台,它包含了一系列burp工具,这些工具之间有大量接口可以互相通信,这样设计的目的是为了促进和提高整个攻...

3823
来自专栏恰同学骚年

.NET Core微服务之基于Steeltoe使用Eureka实现服务注册与发现

  Steeltoe的官方地址:http://steeltoe.io/,其官方介绍如下:

1275
来自专栏Java技术栈

告诉你,Spring Boot 真是个牛逼货!

现在 Spring Boot 非常火,各种技术文章,各种付费教程,多如牛毛,可能还有些不知道 Spring Boot 的,那它到底是什么呢?有什么用?今天给大家...

1012

扫码关注云+社区