本次測試包括吞吐量對比測試與毛刺率對比測試。吞吐量測試使用相同的線程數分別對社區版HBase和云數據庫HBase增強版進行對比測試,對比其吞吐量。毛刺率測試使用相同的吞吐壓力分別對社區版HBase和云數據庫HBase增強版進行對比測試,對比其毛刺率。壓縮率測試使用相同的數據寫入社區版HBase和云數據庫HBase增強版進行對比測試,對比其壓縮比。
在社區版HBase和云數據庫HBase增強版(Lindorm)集群中分別建表。所有case的表構造都相同,根據ycsb數據進行預分區,建表時預分200個分區。
云數據庫HBase增強版,使用獨有的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與云數據庫HBase增強版本的吞吐能力差異。一共有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
hbase.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與云數據庫HBase增強版本的毛刺差別。
單行讀場景
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
hbase.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