bin:
- 目錄下有個可執行的ycsb文件,是個python腳本,是用戶操作的命令行接口。ycsb主邏輯是:解析命令行、設置java環境,加載java-libs,封裝成可以執行的java命令,並執行
workloads:
- 目錄下有各種workload的模板,可以基於workload模板進行個性化修改
core:
- 包含ycsb里各種核心實現,比如DB的虛擬類DB.java,各個db子類都要繼承該類;還有比如workload抽象類,如果我們要自定義workload實現也需要繼承該類
各種DB的目錄:
- 比如mongo,redis等,里面包含了對應測試的源碼等。
- 當ycsb mvn編譯后,會在對應的目錄下生成target文件,ycsb會加載對應target文件中的class類
2 使用
ycsb在執行的時候,分為兩階段:load階段 和 transaction階段
2.1 load階段
該階段主要用於構造測試數據,ycsb會基於參數設定,往db里面構造測試需要的數據,如:
1
|
.
/bin/ycsb
load mongodb-async -s -P workloads
/workloada
> outputLoad.txt
|
mongodb-async
在ycsb中,對於不同的db都有一些選項,比如mongo就有mongodb 和 mongodb-async。
默 認的mongodb表示同步,即load和run使用同步的方式,ycsb會調用mongodb/src底下對應的MongodbClient實現對應的 insert/update等操作。如果設置了mongodb-async,ycsb會調用mongodb/src底下對應的 AsyncMongoDbClient.java實現
參數設置:
1
2
3
4
5
6
7
8
|
Options:
-P
file
Specify workload
file
//
workload文件
-
cp
path Additional Java classpath entries
-jvm-args args Additional arguments to the JVM
-p key=value Override workload property
//
一些設置
-s Print status to stderr
//
把狀態達到stderr中
-target n Target ops
/sec
(default: unthrottled)
//
每秒總共操作的次數
-threads n Number of client threads (default: 1)
//
客戶端線程數
|
參數解讀:
-P workload文件
在ycsb的目錄下有多種workload,參考:https://github.com/brianfrankcooper/YCSB/wiki/Core-Workloads,我們以workloada舉例子
基礎配置:
1
2
3
4
5
6
7
8
9
10
11
12
|
recordcount=1000
# 總共的操作條數
operationcount=1000
# 總共操作的次數
workload=com.yahoo.ycsb.workloads.CoreWorkload=
readallfields=
true
# 在讀取的時候,是否需要讀取所有字段
readproportion=0.5
# 讀取比例
updateproportion=0.5
# update比例
scanproportion=0
insertproportion=0
requestdistribution=zipfian
|
workloada的負載比較中,read和update類比例為1:1,里面一些設置參數如上,如果我們再設置mongo的時候,還需要再workload中增加對應的mongo配置,如下:
1
2
3
|
mongodb.url=mongodb:
//192
.168.137.10:34001
/ycsb
?
# mongodb對應的uri等
mongodb.database=ycsb
# 對應的db
mongodb.writeConcern=normal
# 寫級別
|
-p選項
-p用於設置一些對應的參數,如果workload中的參數,也可以以-p的方式放在命令行中設置
-s
-s是表示,在運行中,把一些狀態打印到stderr中,一般status信息,用於表示在運行中的一些中間狀態(比如當前處理了多少請求,還有多少請求等)
-target n
表示1s中總共的操作次數(各個線程加起來的),如果性能不滿足,比如最高性能只有100,你設置了1000,那么ycsb會盡量往這個數目去靠近。默認是不做限制
-thread 線程數
設置ycsb client的並發測試線程數,默認是1,單線程,所以再測試的時候,一定要設置這個選項
2.2 transcation階段
在2.1load數據結束之后,ycsb就可以進行測試了,也就是transaction階段。在transaction階段,會基於workload中的比例設置,和線程參數設置進行db的壓測。具體參數如上