本次测试分为吞吐量对比测试与毛刺率对比测试。

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

建表

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

云Lindorm,使用独有的INDEX编码(当指定编码为DIFF时会自动升级为INDEX编码算法)和ZSTD压缩

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压缩,建表语句为:

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的配置文件为

recordcount=2000000000
operationcount=150000000
workload=com.yahoo.ycsb.workloads.CoreWorkload

readallfields=false
fieldcount=20
fieldlength=20

readproportion=1.0
updateproportion=0.0
scanproportion=0
insertproportion=0

requestdistribution=uniform
            

启动命令为

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

吞吐量对比测试

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

  • 单行读场景

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

    ycsb的workload配置如下:

    recordcount=10000000
    operationcount=2000000000
    workload=com.yahoo.ycsb.workloads.CoreWorkload
    
    readallfields=false
    fieldcount=1
    fieldlength=20
    
    readproportion=1.0
    updateproportion=0.0
    scanproportion=0
    insertproportion=0
    
    requestdistribution=uniform
                        

    启动命令为

    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配置如下:

    recordcount=10000000
    operationcount=2000000000
    workload=com.yahoo.ycsb.workloads.CoreWorkload
    
    readallfields=false
    fieldcount=1
    fieldlength=20
    
    readproportion=0.0
    updateproportion=0.0
    scanproportion=1.0
    insertproportion=0
    
    requestdistribution=uniform
    maxscanlength=50
    Lindorm.usepagefilter=false
                        

    启动命令为

    bin/ycsb run hbase10 -P <workload> -p table=test -threads 100 -p columnfamily=f -p maxexecutiontime=1200
                        
  • 单行写场景

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

    ycsb的workload配置如下:

    recordcount=2000000000
    operationcount=100000000
    workload=com.yahoo.ycsb.workloads.CoreWorkload
    
    readallfields=false
    fieldcount=1
    fieldlength=20
    
    readproportion=0.0
    updateproportion=0.0
    scanproportion=0
    insertproportion=1.0
    
    requestdistribution=uniform
                        

    启动命令为

    bin/ycsb run hbase10 -P <workload> -p table=test -threads 200 -p columnfamily=f -p maxexecutiontime=1200
                        
  • 批量写场景

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

    recordcount=2000000000
    operationcount=10000000
    workload=com.yahoo.ycsb.workloads.CoreWorkload
    fieldcount=1
    fieldlength=20
    cyclickey=true
    
    readallfields=false
    readproportion=0
    updateproportion=0
    scanproportion=0
    insertproportion=0.0
    batchproportion=1.0
    batchsize=100
    
    requestdistribution=uniform
                        

    启动命令为

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

毛刺率对比测试

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

  • 单行读场景

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

    ycsb的workload配置如下:

    recordcount=10000000
    operationcount=2000000000
    workload=com.yahoo.ycsb.workloads.CoreWorkload
    
    readallfields=false
    fieldcount=1
    fieldlength=20
    
    readproportion=1.0
    updateproportion=0.0
    scanproportion=0
    insertproportion=0
    
    requestdistribution=uniform
                        

    启动命令为

    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配置如下:

    recordcount=10000000
    operationcount=2000000000
    workload=com.yahoo.ycsb.workloads.CoreWorkload
    
    readallfields=false
    fieldcount=1
    fieldlength=20
    
    readproportion=0.0
    updateproportion=0.0
    scanproportion=1.0
    insertproportion=0
    
    requestdistribution=uniform
    maxscanlength=50
    Lindorm.usepagefilter=false
                        

    启动命令为

    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配置如下:

    recordcount=2000000000
    operationcount=100000000
    workload=com.yahoo.ycsb.workloads.CoreWorkload
    
    readallfields=false
    fieldcount=1
    fieldlength=20
    
    readproportion=0.0
    updateproportion=0.0
    scanproportion=0
    insertproportion=1.0
    
    requestdistribution=uniform
                        

    启动命令为

    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

    recordcount=2000000000
    operationcount=10000000
    workload=com.yahoo.ycsb.workloads.CoreWorkload
    fieldcount=1
    fieldlength=20
    cyclickey=true
    
    readallfields=false
    readproportion=0
    updateproportion=0
    scanproportion=0
    insertproportion=0.0
    batchproportion=1.0
    batchsize=100
    
    requestdistribution=uniform
                        

    启动命令为

    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配置如下

recordcount=5000000
operationcount=150000000
workload=com.yahoo.ycsb.workloads.CoreWorkload

readallfields=false
fieldcount=<每行列个数>
fieldlength=<每列value大小>

readproportion=1.0

requestdistribution=uniform
            

写入数据命令为

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