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