測試方法
本次測試包括吞吐量對比測試與毛刺率對比測試。
吞吐量測試使用相同的線程數(shù)分別對社區(qū)版HBase和云原生多模數(shù)據(jù)庫 Lindorm進行對比測試,對比其吞吐量。毛刺率測試使用相同的吞吐壓力分別對社區(qū)版HBase和云原生多模數(shù)據(jù)庫 Lindorm進行對比測試,對比其毛刺率。壓縮率測試使用相同的數(shù)據(jù)寫入社區(qū)版HBase和云原生多模數(shù)據(jù)庫 Lindorm進行對比測試,對比其壓縮比。
建表
在社區(qū)版HBase和云原生多模數(shù)據(jù)庫 Lindorm集群中分別建表。所有case的表構造都相同,根據(jù)ycsb數(shù)據(jù)進行預分區(qū),建表時預分200個分區(qū)。
建表語句請使用HBase Shell執(zhí)行,使用方法請參見通過Lindorm Shell訪問寬表引擎。
云原生多模數(shù)據(jù)庫 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")}"} }
社區(qū)版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")}"} }
數(shù)據(jù)準備
對于單行讀和范圍讀場景,需要對讀取的數(shù)據(jù)進行數(shù)據(jù)準備。
單表準備20億行基礎數(shù)據(jù),每行數(shù)據(jù)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
吞吐量對比測試
吞吐量測試為在固定線程數(shù)條件下,對比社區(qū)版HBase與云原生多模數(shù)據(jù)庫 Lindorm本的吞吐能力差異。 一共有4個測試場景,每組測試場景均獨立進行,測試場景之間沒有前后依賴關系。
單行讀場景
20億行基礎數(shù)據(jù),每行數(shù)據(jù)20列,value為20byte,查詢區(qū)間為1000萬行。上述數(shù)據(jù)準備完成后,觸發(fā)其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億行基礎數(shù)據(jù),每行數(shù)據(jù)20列,value為20byte。查詢區(qū)間為1000萬行,每次范圍讀取50行。 上述數(shù)據(jù)準備完成后,觸發(fā)其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。執(zhí)行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行。執(zhí)行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)的條件下,對比社區(qū)版HBase與云原生多模數(shù)據(jù)庫 Lindorm本的毛刺差別。
單行讀場景
20億行基礎數(shù)據(jù),每行數(shù)據(jù)20列,value為20byte,查詢區(qū)間為1000萬行。 OPS限制為5000 上述數(shù)據(jù)準備完成后,觸發(fā)其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億行基礎數(shù)據(jù),每行數(shù)據(jù)20列,value為20byte,查詢區(qū)間為1000萬行,每次范圍讀取50行。 OPS限制為5000 上述數(shù)據(jù)準備完成后,觸發(fā)其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。執(zhí)行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行。執(zhí)行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萬行測試數(shù)據(jù),手動觸發(fā)flush與major_compaction并等待完成,統(tǒng)計其表大小。
每行列個數(shù) | 每列value大小 |
1 | 10 |
20 | 10 |
20 | 20 |
100 | 10 |
ycsb的workload配置如下:
recordcount=5000000
operationcount=150000000
workload=com.yahoo.ycsb.workloads.CoreWorkload
readallfields=false
fieldcount=<每行列個數(shù)>
fieldlength=<每列value大小>
readproportion=1.0
requestdistribution=uniform
寫入數(shù)據(jù)命令為:
bin/ycsb load hbase10 -P <workload> -p table=test -threads 200 -p columnfamily=f -s