本次测试包括吞吐量对比测试与毛刺率对比测试。
吞吐量测试使用相同的线程数分别对社区版HBase和云原生多模数据库 Lindorm进行对比测试,对比其吞吐量。毛刺率测试使用相同的吞吐压力分别对社区版HBase和云原生多模数据库 Lindorm进行对比测试,对比其毛刺率。压缩率测试使用相同的数据写入社区版HBase和云原生多模数据库 Lindorm进行对比测试,对比其压缩比。
建表
在社区版HBase和云原生多模数据库 Lindorm集群中分别建表。所有case的表构造都相同,根据ycsb数据进行预分区,建表时预分200个分区。
建表语句请使用HBase Shell执行,使用方法请参见通过Lindorm Shell访问宽表引擎。
云原生多模数据库 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=20 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=20 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=20 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=20 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 |
20 | 10 |
20 | 20 |
100 | 10 |
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