YCSB(Yahoo! Cloud Serving Benchmark)是雅虎开源的用于测试新式数据库(主要为 NoSQL)性能的框架,使用 Java 实现,可以测试 HBase、Cassandra、Infinispan、MongoDB 等等。
YCSB 包括两个部分:
YCSB 客户端,一个可以扩展的 workload 生成器
Core workloads,预先配置好的 workloads
安装 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
其中 workloads 文件夹中为预置的 Core workload,*-binding 文件夹中为预置的数据库接口层。
运行一个压力测试
运行一个压力测试需要 6 步:
配置需要测试的数据库
选择合适的数据库接口层
选择合适的 workload
选择合适的运行时参数
装载数据(loading phase)
运行测试(transaction phase)
这些步骤适合于在单个客户端上运行(小型和中型集群,10 个左右的服务节点),更大的集群需要多个客户端同时运行测试。
第一步:配置需要测试的数据库
YCSB 不负责表的创建,需要在数据库中手动创建用于测试的表。例如在 HBase 中,需要手动创建一个表和一个列族。
为了让测试数据均匀分布在不同节点中,创建 HBase 表时需要设置预先分片策略(参考 HBASE-4163)。
hbase(main):001:0> n_splits = 20 # HBase recommends (10 * number of regionservers)
hbase(main):002:0> create 'usertable', 'cf', {SPLITS => (1..n_splits).map {|i| "user#{1000+i*(9999-1000)/n_splits}"}}
这里 n_splits 推荐设置为 RegionServer 数量 * 10。
第二步:选择合适的数据库接口层
YCSB 预置了一些常用数据库的接口层,对于 HBase 测试,需要选择 com.yahoo.ycsb.db.HBaseClient 作为接口。
另外 YCSB 需要知道如何连接到 HBase 的 Zookeeper 服务,最简单的方法是将目标测试服务器上的 HBase 配置文件 $HBASE_HOME/conf/hbase-site.xml 复制到 $YCSB/hbase12/conf 中(低版本 HBase 需要复制到对应的 hbase10 等文件夹中)。
YCSB 也提供了一个 com.yahoo.ycsb.BasicDB 数据库接口层,这个接口层仅仅打印收到的数据库操作请求,可以用来调试。
可以用 bin/yscb shell 来测试数据库接口层配置是否正确,例如使用 BasicDB 层:
$ ./bin/ycsb shell basic
> help
Commands:
read key [field1 field2 ...] - Read a record
scan key recordcount [field1 field2 ...] - Scan starting at key
insert key name1=value1 [name2=value2 ...] - Insert a new record
update key name1=value1 [name2=value2 ...] - Update a record
delete key - Delete a record
table [tablename] - Get or [set] the name of the table
quit - Quit
第三步:选择合适的 workload
Workload 定义了如何向数据库中加载测试数据,包括两个部分:<