本次測試包括吞吐量對比測試與毛刺率對比測試。吞吐量測試使用相同的線程數分別對社區版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