YCSB測試Hbase和PG

Hbase + PostgreSQL測試

基本信息

Hbase與PG測試使用YCSB壓力測試工具

採用21w行數據+21w操作數來最大化模擬20G數據場景

測試方法

HBASE

  • 首先下載YCSB,解壓

  • 接下來創建測試數據庫

    hbase shell命令打開shell命令行

    hbase(main):001:0> n_splits = 20 # HBase recommends (10 * number of regionservers)
    hbase(main):002:0> create 'usertable', 'cf', {SPLITS => (1..n_splits).map {|i| "user#{1000+i*(9999-1000)/n_splits}"}}
    
  • 把hbase的conf目錄下的|$HBASE_HOME/conf/hbase-site.xml(比如我本機是/usr/local/hbase/conf/hbase-site.xml)複製到我們下載的YCSB中的hbase14下的conf文件夾中

  • 接下來裝載數據

    $ ./bin/ycsb load hbase14 -P workloads/workloada -p table=usertable -p columnfamily=cf -p recordcount=210000 -p operationcount=210000 -p measurementtype=hdrhistogram -p hdrhistogram.fileoutput=true -p hdrhistogram.output.path=/Users/laijie/ -threads 50 -s
    # 注意這裏面的path更換爲本機可以存放文件的目錄,並且注意這個文件等會還會用
    
  • 裝載好之後開始跑測試

    $ ./bin/ycsb run hbase14 -P workloads/workloada -p table=usertable -p columnfamily=cf -p recordcount=210000 -p operationcount=210000 -p measurementtype=hdrhistogram -p hdrhistogram.fileoutput=true -p hdrhistogram.output.path=/Users/laijie/ -threads 50 -s
    # 注意這裏面的path更換爲本機可以存放文件的目錄,並且注意這個文件等會還會用
    

這裏面使用的是workloada,想要測試其他情況更換參數即可

  • Workload A:
    • 重更新,50% 讀 50% 寫,例如 session sotre
  • Workload B:
    • 讀多寫少,95% 讀 5% 寫,例如 photo tagging
  • Workload C:
    • 只讀:100% 讀,例如 user profile cache
  • Workload D:
    • 讀最近更新:這個 workload 會插入新紀錄,越新的紀錄讀取概率越大,例如:user status updates
  • Workload E:
    • 小範圍查詢:這個 workload 會查詢小範圍的紀錄,而不是單個紀錄,例如:threaded conversations
  • Workload F:
    • 讀取-修改-寫入:這個 workload 會讀取一個紀錄,然後修改這個紀錄,最後寫回,例如:user database

跑完之後測試結果如下

在這裏插入圖片描述

2019-08-22 10:56:17:879 10 sec: 137084 operations; 13705.66 current ops/sec; est completion in 6 second READ: Count=68504, Max=178687, Min=813, Avg=3263.97, 90=4379, 99=9751, 99.9=23583, 99.99=144511
2019-08-22 10:56:21:776 13 sec: 210000 operations; 18710.8 current ops/sec; READ: Count=36475, Max=29167, Min=286, Avg=2597.52, 90=3033, 99=6147, 99.9=14079, 99.99=20399 UPDATE: Count=36086, Max=26079, Min=265, Avg=2701.23, 90=3137, 99=6315, 99.9=15215, 99.99=20463, RunTime(ms), 13898
[OVERALL], Throughput(ops/sec), 15110.087782414736
[TOTAL_GCS_PS_Scavenge], Count, 23
[TOTAL_GC_TIME_PS_Scavenge], Time(ms), 111
[TOTAL_GC_TIME%PS_Scavenge], Time(%), 0.7986760684990647
[TOTAL_GCS_PS_MarkSweep], Count, 1
[TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 32
[TOTAL_GC_TIME%PS_MarkSweep], Time(%), 0.23024895668441503
[TOTAL_GCs], Count, 24
[TOTAL_GC_TIME], Time(ms), 143
[TOTAL_GC_TIME_%], Time(%), 1.0289250251834796
[READ], Operations, 104979
[READ], AverageLatency(us), 3032.414387639433
[READ], MinLatency(us), 286
[READ], MaxLatency(us), 178687
[READ], 95thPercentileLatency(us), 5127
[READ], 99thPercentileLatency(us), 9151
[READ], Return=OK, 104979
[CLEANUP], Operations, 100
[CLEANUP], AverageLatency(us), 191.15
[CLEANUP], MinLatency(us), 1
[CLEANUP], MaxLatency(us), 17615
[CLEANUP], 95thPercentileLatency(us), 20
[CLEANUP], 99thPercentileLatency(us), 1020
[UPDATE], Operations, 105021
[UPDATE], AverageLatency(us), 3187.596452138144
[UPDATE], MinLatency(us), 265
[UPDATE], MaxLatency(us), 260863
[UPDATE], 95thPercentileLatency(us), 5315
[UPDATE], 99thPercentileLatency(us), 9439
[UPDATE], Return=OK, 105021

然後我們會在設定的目錄下面得到幾個hdr文件,包括INSERT.hdr、READ.hdr、UPDATE.hdr等,我們要用histogram自帶工作來進行圖例的生成

  • 首先我們解壓必需軟件文件夾中的HdrHistogram然後導入到IntelliJ Idea中,通過mvn工具,先build,然後package生成histogram.jar文件

在這裏插入圖片描述

  • 接下來我們在目錄根使用已經寫好的腳本進行格式轉換

在這裏插入圖片描述

$ ./HistogramLogProcessor -i INSERT.hdr -o insert -outputValueUnitRatio 1000

$ ./HistogramLogProcessor -i UPDATE.hdr -o update -outputValueUnitRatio 1000

$ ./HistogramLogProcessor -i READ.hdr -o read -outputValueUnitRatio 1000
  • 格式轉換後我們可以得到hgrm文件

  • 最後在轉換網址中即可得到圖例

PG

pg的基本步驟差不多,下面是一些

  • 從Postgresql官網下載JDBC,放到 ycsb-0.15.0/jdbc-binding/lib 文件夾下,下載的是postgresql-42.2.6.jar

  • 修改ycsb-0.15.0/jdbc-binding/conf/db.properties配置文件

db.driver=org.postgresql.Driver

db.url=jdbc:postgresql://localhost/foo  // foo替換爲postgresql裏面的一個數據庫

db.user=lemon							// postgresql的用戶名

ddb.passwd=lemon						// postgresql的密碼
  • 在ycsb-0.15.0文件夾下面執行下面命令,創建usertable表

    $ java -cp jdbc-binding/lib/jdbc-binding-0.15.0.jar:jdbc-binding/lib/postgresql-42.2.6.jar com.yahoo.ycsb.db.JdbcDBCreateTable -P jdbc-binding/conf/db.properties -n usertable
    
  • 執行load程序,加載數據

    $ ./bin/ycsb load jdbc -s -P workloads/workloada -P jdbc-binding/conf/db.properties -cp jdbc-binding/lib/postgresql-42.2.6.jar -p measurementtype=hdrhistogram -p hdrhistogram.fileoutput=true -p hdrhistogram.output.path=../ -p recordcount=210000 -p operationcount=210000 -threads 50 -s # 仍然是要注意替換路徑
    
  • 執行run程序

    $ ./bin/ycsb run jdbc -s -P workloads/myworkload -P jdbc-binding/conf/db.properties -cp jdbc-binding/lib/postgresql-42.2.6.jar -p measurementtype=hdrhistogram -p hdrhistogram.fileoutput=true -p hdrhistogram.output.path=../ -threads 50 -s
    

在這裏插入圖片描述

[OVERALL], RunTime(ms), 424850
[OVERALL], Throughput(ops/sec), 494.29210309521005
[TOTAL_GCS_PS_Scavenge], Count, 35
[TOTAL_GC_TIME_PS_Scavenge], Time(ms), 134
[TOTAL_GC_TIME_%_PS_Scavenge], Time(%), 0.03154054372131341
[TOTAL_GCS_PS_MarkSweep], Count, 0
[TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 0
[TOTAL_GC_TIME_%_PS_MarkSweep], Time(%), 0.0
[TOTAL_GCs], Count, 35
[TOTAL_GC_TIME], Time(ms), 134
[TOTAL_GC_TIME_%], Time(%), 0.03154054372131341
[READ], Operations, 104951
[READ], AverageLatency(us), 599.9616297129137
[READ], MinLatency(us), 61
[READ], MaxLatency(us), 61535
[READ], 95thPercentileLatency(us), 1230
[READ], 99thPercentileLatency(us), 2069
[READ], Return=OK, 104951
[CLEANUP], Operations, 50
[CLEANUP], AverageLatency(us), 999.9
[CLEANUP], MinLatency(us), 111
[CLEANUP], MaxLatency(us), 6411
[CLEANUP], 95thPercentileLatency(us), 3045
[CLEANUP], 99thPercentileLatency(us), 6411
[UPDATE], Operations, 105049
[UPDATE], AverageLatency(us), 189664.3654104275
[UPDATE], MinLatency(us), 6156
[UPDATE], MaxLatency(us), 20922367
[UPDATE], 95thPercentileLatency(us), 436223
[UPDATE], 99thPercentileLatency(us), 3047423
[UPDATE], Return=OK, 105049

轉換爲圖的操作與Hbase一致

測試圖例

HBASE插入延遲圖例

在這裏插入圖片描述

HBASE更新讀取延遲圖例

在這裏插入圖片描述

PG插入延遲圖例

在這裏插入圖片描述

PG更新讀取延遲圖例

在這裏插入圖片描述

作者:槐洛文
更多請見博客

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章