NoSQL基準測試工具-YCSB

1.簡介node

       ycsb 它是一個數據庫測試工具,全稱爲「Yahoo! Cloud Serving Benchmark」。它內置了對常見NoSQL數據庫和數據網格產品的支持,如Cassandra、MongoDB、HBase、Redis、Infinispan等等不少的主流產品,並且不只安裝使用簡單,還能自由擴展測試數據類型和支持的數據庫產品。產品介紹:https://s.yimg.com/ge/labs/v1/files/ycsb-v4.pdfpython


2.編譯git

安裝github

下載地址: https://github.com/brianfrankcooper/YCSB/releases/download/0.6.0/ycsb-0.6.0.tar.gz   數據庫

源碼地址:https://github.com/brianfrankcooper/YCSBbash

wiki地址:https://github.com/brianfrankcooper/YCSB/wiki服務器

編譯maven

所有database build工具

mvn clean package

單個database buildoop

mvn -pl com.yahoo.ycsb:hbase10-binding -am clean package

安裝包位置

  • 所有database ---distrbution工程內的target中
  • 單個database --- 在各類database文件夾的target中

      (注意:不一樣版本的工程編譯完成後可能不太一致,可是大致上都是一致的)


3.如何使用

編譯tar.gz包以後目錄以下:(我下載的最新的非發行版是0.7)

 解釋:

目錄中包含 lib,bin,workloads和數據庫的目錄。

       -- lib 是ycsb的核心jar所在位置 (當你運行時可能會遇到log4j版本不夠高,此時把高版本的jar copy到此處)

       -- bin 是運行到啓動腳本 (此腳本是python寫的,可能會遇到你的缺失python的一些組件,請自行安裝)

       -- workloads 是測試的一些模版 (固然你能夠本身寫,或者是修改它)

       --數據庫的一些配置和依賴的jar包 (手動編譯可能不會去少jar,可是有的發行版本缺乏一些jar致使運行不成功,好比網上比較多的 0.1.4 版本) 

Workloads講解

默認提供的模版爲

  • workloada讀多寫少,50%讀,50%更新。
  • workloadb讀多寫少,95%讀,5%更新。
  • workloadc讀多無寫,100%讀。
  • workloadd讀多寫少,95%讀,5%插入。
  • workloade讀多寫少,95%讀,5%插入。
  • workloadf 讀多寫少,50%讀,50%讀寫修改同一條記錄。

workloada解讀

# Yahoo! Cloud System Benchmark
# Workload A: Update heavy workload
#   Application example: Session store recording recent actions
#
#   Read/update ratio: 50/50
#   Default data size: 1 KB records (10 fields, 100 bytes each, plus key)
#   Request distribution: zipfian

#記錄條數
recordcount=1000
#操做次數
operationcount=1000
#核心模版類(通常請不用修改,若是是自定義workload則須要修改)
workload=com.yahoo.ycsb.workloads.CoreWorkload

#是否讀取全部字段
readallfields=true

#讀取百分比
readproportion=0.5
#更新百分比
updateproportion=0.5
#全表查詢百分比
scanproportion=0
#插入百分比
insertproportion=0

#請求數據訪問數據的分佈規則
requestdistribution=zipfian

具體參數

  • fieldcount: 每條記錄字段個數 (default: 10)
  • fieldlength: 每一個字段長度 (default: 100)
  • readallfields: 是否讀取全部字段true或者讀取一個字段false (default: true)
  • readproportion: 讀取做業比例 (default: 0.95)
  • updateproportion: 更新做業比例 (default: 0.05)
  • insertproportion: 插入做業比例 (default: 0)
  • scanproportion: 掃描做業比例 (default: 0)
  • readmodifywriteproportion: 讀取一條記錄修改它並寫回的比例 (default: 0)
  • requestdistribution: 請求的分佈規則 uniform, zipfian or latest (default: uniform)
  • maxscanlength: 掃描做業最大記錄數 (default: 1000)
  • scanlengthdistribution: 在1和最大掃描記錄數的之間的分佈規則 (default: uniform)
  • insertorder: 記錄被插入的規則ordered或者hashed (default: hashed)
  • operationcount: 執行的操做數.
  • maxexecutiontime: 執行操做的最長時間,固然若是沒有超過這個時間以運行時間爲主。
  • table: 測試表的名稱 (default: usertable)
  • recordcount: 加載到數據庫的紀錄條數 (default: 0) 

安裝

安裝很簡單,直接將包copy到服務器解壓便可。

tar -zxvf ycsb-0.7.0.tar.gz
cd ycsb-0.7.0

4.運行調試

 本文只講解HBase導入性能調試。(在每次測試前請,清空測試表)

    --解壓以後,在測試以前須要作3步驗證,不然不能運行(前提是保證HBase正常運行)

    --須要提早建表,默認表名稱是 「usertable」   create ‘usertable’,’f1'

   1.關於log4j

       core/lib 目錄下須要log4j 1.6版本以上的版本,不然着添加相關jar

   2.關於NoSQL配置

      hbase-binding/conf 目錄下須要將集羣hbase的hbase-site.xml copy到這個目錄(注意 hbase.rootdir這個參數要寫成namenode節點加端口,由於有些HBase HA設置這裏寫到不符合要求)    

      hbase-binding/lib 目錄下須要包含hbase的全部jar包 和 hadoop相關jar hadoop-hdfs /hadoop-   

auth/hadoop-common/hadoop-annotations

運行命令

導入數據

./bin/ycsb load hbase -P workloads/workloada -p columnfamily=f1 -s > load.dat

運行測試模版

./bin/ycsb run hbase -P workloads/workloada -p columnfamily=f1 -s > run.dat

解釋:load表示導入 run表示運行

           hbase導入到類型

           -P 是YCSB提供的一個測試模版(能夠修改,也能夠本身寫一個,也能夠經過 -p 參數覆蓋)

           -s > load.dat 表示將結果寫到文件load.dat裏

workloads 詳細配置請看:https://github.com/brianfrankcooper/YCSB/wiki/Running-a-Workload

運行參數 詳細請看:https://github.com/brianfrankcooper/YCSB/wiki/Core-Properties

日誌以下:

數據導入log

Command line: -db com.yahoo.ycsb.db.HBaseClient -P ../workloads/workloada -p columnfamily=f1 -s -load
[OVERALL], RunTime(ms), 2266.0
[OVERALL], Throughput(ops/sec), 441.306266548985
[INSERT], Operations, 1000
[INSERT], AverageLatency(us), 1555.866
[INSERT], MinLatency(us), 106
[INSERT], MaxLatency(us), 1316612
[INSERT], 95thPercentileLatency(ms), 0
[INSERT], 99thPercentileLatency(ms), 0
[INSERT], Return=0, 1000
[INSERT], 0, 997
[INSERT], 1, 2
[INSERT], 2, 0
[INSERT], 3, 0
[INSERT], 4, 0
[INSERT], 5, 0
...

測試模版運行log

Command line: -db com.yahoo.ycsb.db.HBaseClient -P ../workloads/workloada -p columnfamily=f1 -s -t
[OVERALL], RunTime(ms), 7899.0
[OVERALL], Throughput(ops/sec), 126.59830358273199
[UPDATE], Operations, 514
[UPDATE], AverageLatency(us), 2788.3696498054474
[UPDATE], MinLatency(us), 59
[UPDATE], MaxLatency(us), 1353466
[UPDATE], 95thPercentileLatency(ms), 0
[UPDATE], 99thPercentileLatency(ms), 0
[UPDATE], Return=0, 514
[UPDATE], 0, 512
[UPDATE], 1, 1
[UPDATE], 2, 0
...
[UPDATE], 999, 0
[UPDATE], >1000, 1
[READ], Operations, 486
[READ], AverageLatency(us), 12840.707818930041
[READ], MinLatency(us), 1491
[READ], MaxLatency(us), 348069
[READ], 95thPercentileLatency(ms), 38
[READ], 99thPercentileLatency(ms), 59
[READ], Return=0, 486
[READ], 0, 0
[READ], 1, 37
[READ], 2, 98
...

 


5.結構分析

因爲YCSB能夠本身擴展數據庫類型,因此這裏簡單講解下結構。

運行機制

其中DB client就是咱們能夠自行擴展的組件。

新建DB Client

1.新建工程:在YCSB根目錄下,新建一個maven工程,子工程會自動加載到parents 工程中。

2.添加依賴:將core包和其餘依賴包寫入pom文件中,並加入build配置。(能夠參照其餘子工程)

3.添加子類:新工程下的類須要繼承core包下的DB類

4.執行:能夠經過-db指定咱們的DB類,或者在啓動腳本中加入新工程DB類的別名

相關文章
相關標籤/搜索