全部产品
云市场

测试方法

更新时间:2019-05-27 11:59:56

本次测试分为吞吐量对比测试与毛刺率对比测试。吞吐量测试使用相同的线程数分别对社区版HBase和云HBase增强版进行对比测试,对比其吞吐量。毛刺率测试使用相同的吞吐压力分别对社区版HBase和云HBase增强版进行对比测试,对比其毛刺率。压缩率测试使用相同的数据写入社区版HBase和云HBase增强版进行对比测试,对比其压缩比。

建表

在社区版HBase和云HBase增强版(Lindorm)集群中分别建表。所有case的表构造都相同,根据ycsb数据进行预分区,建表时预分200个分区。

云HBase增强版,使用独有的INDEX编码(当指定编码为DIFF时会自动升级为INDEX编码算法)和ZSTD压缩(参考其相关介绍),建表语句为:

  1. create 'test', {NAME => 'f', DATA_BLOCK_ENCODING => 'DIFF', COMPRESSION => 'ZSTD'}, {SPLITS => (1..199).map{|i| "user#{(i * ((2**63-1)/199)).to_s.rjust(19, "0")}"} }

社区版HBase,使用官方推荐的DIFF编码和SNAPPY压缩,建表语句为:

  1. create 'test', {NAME => 'f', DATA_BLOCK_ENCODING => 'DIFF', COMPRESSION => 'SNAPPY'}, {SPLITS => (1..199).map{|i| "user#{(i * ((2**63-1)/199)).to_s.rjust(19, "0")}"} }

数据准备

对于单行读和范围读场景,需要对读取的数据进行数据准备。

单表准备20亿行基础数据,每行数据20列,value为20byte。

ycsb的配置文件为

  1. recordcount=2000000000
  2. operationcount=150000000
  3. workload=com.yahoo.ycsb.workloads.CoreWorkload
  4. readallfields=false
  5. fieldcount=20
  6. fieldlength=20
  7. readproportion=1.0
  8. updateproportion=0.0
  9. scanproportion=0
  10. insertproportion=0
  11. requestdistribution=uniform

启动命令为

  1. bin/ycsb load hbase10 -P <workload> -p table=test -threads 200 -p columnfamily=f -s

测试场景

吞吐量对比测试

吞吐量测试为在固定线程数条件下,对比社区版HBase与云HBase增强版本的吞吐能力差异。一共有4个测试场景,每组测试场景均独立进行,测试场景之间没有前后依赖关系。

单行读场景

20亿行基础数据,每行数据20列,value为20byte,查询区间为1000万行。上述数据准备完成后,触发其major_compaction并等待完成。先进行预热测试20分钟,再进行20分钟的正式测试。

ycsb的workload配置如下:

  1. recordcount=10000000
  2. operationcount=2000000000
  3. workload=com.yahoo.ycsb.workloads.CoreWorkload
  4. readallfields=false
  5. fieldcount=1
  6. fieldlength=20
  7. readproportion=1.0
  8. updateproportion=0.0
  9. scanproportion=0
  10. insertproportion=0
  11. requestdistribution=uniform

启动命令为

  1. bin/ycsb run hbase10 -P <workload> -p table=test -threads 200 -p columnfamily=f -p maxexecutiontime=1200

范围读场景

20亿行基础数据,每行数据20列,value为20byte。查询区间为1000万行,每次范围读取50行。上述数据准备完成后,触发其major_compaction并等待完成。先进行预热测试20分钟,再进行20分钟的正式测试。

ycsb的workload配置如下:

  1. recordcount=10000000
  2. operationcount=2000000000
  3. workload=com.yahoo.ycsb.workloads.CoreWorkload
  4. readallfields=false
  5. fieldcount=1
  6. fieldlength=20
  7. readproportion=0.0
  8. updateproportion=0.0
  9. scanproportion=1.0
  10. insertproportion=0
  11. requestdistribution=uniform
  12. maxscanlength=50
  13. hbase.usepagefilter=false

启动命令为

  1. bin/ycsb run hbase10 -P <workload> -p table=test -threads 100 -p columnfamily=f -p maxexecutiontime=1200

单行写场景

每次插入1列,value为20byte。执行20分钟测试

ycsb的workload配置如下:

  1. recordcount=2000000000
  2. operationcount=100000000
  3. workload=com.yahoo.ycsb.workloads.CoreWorkload
  4. readallfields=false
  5. fieldcount=1
  6. fieldlength=20
  7. readproportion=0.0
  8. updateproportion=0.0
  9. scanproportion=0
  10. insertproportion=1.0
  11. requestdistribution=uniform

启动命令为

  1. bin/ycsb run hbase10 -P <workload> -p table=test -threads 200 -p columnfamily=f -p maxexecutiontime=1200

批量写场景

每次插入1列,value为20byte,每次batch写入100行。执行20分钟测试:

  1. recordcount=2000000000
  2. operationcount=10000000
  3. workload=com.yahoo.ycsb.workloads.CoreWorkload
  4. fieldcount=1
  5. fieldlength=20
  6. cyclickey=true
  7. readallfields=false
  8. readproportion=0
  9. updateproportion=0
  10. scanproportion=0
  11. insertproportion=0.0
  12. batchproportion=1.0
  13. batchsize=100
  14. requestdistribution=uniform

启动命令为

  1. bin/ycsb run hbase10 -P <workload> -p table=test -threads 100 -p columnfamily=f -p maxexecutiontime=1200

毛刺率对比测试

毛刺率对比测试为在固定OPS(Operation per second)的条件下,对比社区版HBase与云HBase增强版本的毛刺差别。

单行读场景

20亿行基础数据,每行数据20列,value为20byte,查询区间为1000万行。OPS限制为5000上述数据准备完成后,触发其major_compaction并等待完成。先进行预热测试20分钟,再进行20分钟的正式测试。

ycsb的workload配置如下:

  1. recordcount=10000000
  2. operationcount=2000000000
  3. workload=com.yahoo.ycsb.workloads.CoreWorkload
  4. readallfields=false
  5. fieldcount=1
  6. fieldlength=20
  7. readproportion=1.0
  8. updateproportion=0.0
  9. scanproportion=0
  10. insertproportion=0
  11. requestdistribution=uniform

启动命令为

  1. bin/ycsb run hbase10 -P <workload> -p table=test -threads 200 -p columnfamily=f -p maxexecutiontime=1200 -p target=5000

范围读场景

20亿行基础数据,每行数据20列,value为20byte,查询区间为1000万行,每次范围读取50行。OPS限制为5000上述数据准备完成后,触发其major_compaction并等待完成。先进行预热测试20分钟,再进行20分钟的正式测试。

ycsb的workload配置如下:

  1. recordcount=10000000
  2. operationcount=2000000000
  3. workload=com.yahoo.ycsb.workloads.CoreWorkload
  4. readallfields=false
  5. fieldcount=1
  6. fieldlength=20
  7. readproportion=0.0
  8. updateproportion=0.0
  9. scanproportion=1.0
  10. insertproportion=0
  11. requestdistribution=uniform
  12. maxscanlength=50
  13. hbase.usepagefilter=false

启动命令为

  1. bin/ycsb run hbase10 -P <workload> -p table=test -threads 100 -p columnfamily=f -p maxexecutiontime=1200 -p target=5000

单行写场景

每次插入1列,value为20byte。执行20分钟测试OPS限制为50000

ycsb的workload配置如下:

  1. recordcount=2000000000
  2. operationcount=100000000
  3. workload=com.yahoo.ycsb.workloads.CoreWorkload
  4. readallfields=false
  5. fieldcount=1
  6. fieldlength=20
  7. readproportion=0.0
  8. updateproportion=0.0
  9. scanproportion=0
  10. insertproportion=1.0
  11. requestdistribution=uniform

启动命令为

  1. bin/ycsb run hbase10 -P <workload> -p table=testwrite -threads 200 -p columnfamily=f -p maxexecutiontime=1200 -p target=50000

批量写场景

每次插入1列,value为20byte,每次batch写入100行。执行20分钟测试:ops限制为2000

  1. recordcount=2000000000
  2. operationcount=10000000
  3. workload=com.yahoo.ycsb.workloads.CoreWorkload
  4. fieldcount=1
  5. fieldlength=20
  6. cyclickey=true
  7. readallfields=false
  8. readproportion=0
  9. updateproportion=0
  10. scanproportion=0
  11. insertproportion=0.0
  12. batchproportion=1.0
  13. batchsize=100
  14. requestdistribution=uniform

启动命令为

  1. bin/ycsb run hbase10 -P <workload> -p table=testwrite -threads 100 -p columnfamily=f -p maxexecutiontime=1200 -p target=2000

压缩率对比测试

以下所有压缩率对比测试均使用同一测试流程。通过ycsb写入500万行测试数据,手动触发flush与major_compaction并等待完成,统计其表大小。

每行列个数 每列value大小
1 10
1 100
20 10
20 20

ycsb的workload配置如下

  1. recordcount=5000000
  2. operationcount=150000000
  3. workload=com.yahoo.ycsb.workloads.CoreWorkload
  4. readallfields=false
  5. fieldcount=<每行列个数>
  6. fieldlength=<每列value大小>
  7. readproportion=1.0
  8. requestdistribution=uniform

写入数据命令为

  1. bin/ycsb load hbase10 -P <workload> -p table=test -threads 200 -p columnfamily=f -s