熟悉mysql的同學一定都聽說過tpcc-mysql這個mysql性能測試的工具,與其類似,nosql界也有一個性能基准測試工具ycsb。Yahoo! Cloud Serving Benchmark。
ycsb需要java環境,需要maven。
mvn clean package的時候可能會報錯…在pom.xml中把不需要的測試對象刪除即可,如infinispan,cassandra,hbase之類的。
在workloads目錄中,ycsb提供了6種workload,比如50%讀50%寫,95%讀5%寫等等,每次只能測試某一種workload。
測試的過程分為load 與 run 二個過程,load即為把測試數據寫入db,run即為 run workload。
ycsb支持的參數並不多,這樣很好。
./bin/ycsb load mongodb -s -P workloads/workloadH -threads 100 >out
./bin/ycsb run mongodb -s -P workloads/workloadH -threads 200 >out
來看哥的1主2從,10M行1Kb大小的數據,數據總大小為10G。
100%讀 0寫,讀取5M次。
YCSB Client 0.1
Command line: -db com.yahoo.ycsb.db.MongoDbClient -s -P workloads/workloadH -threads 200 -t
new database url = mongo-proxy:11111/ycsb
[OVERALL], RunTime(ms), 108056.0
[OVERALL], Throughput(ops/sec), 46272.30325016658
[READ], Operations, 5000000
[READ], AverageLatency(us), 3587.7228064
[READ], MinLatency(us), 1565
[READ], MaxLatency(us), 392512
[READ], 95thPercentileLatency(ms), 6
[READ], 99thPercentileLatency(ms), 10
[READ], Return=0, 5000000
us是微秒的意思microsecond。
ms是毫秒的意思millisecond。
如果要允許secondary支持讀取操作,需要在MongoOptions options = new MongoOptions();之後添加以下代碼:
options.setReadPreference(ReadPreference.secondaryPreferred());
而且要import com.mongodb.ReadPreference;
如果有認證,需要在new Mongo()之後添加以下代碼:
com.mongodb.DB db = null;
db = mongo.getDB("admin");
char[] pwd_char = "密碼".toCharArray();
boolean auth = db.authenticate("用戶名",pwd_char);
話說這個java太煩了...密碼還要自己轉化成 char Array。
scan($gte)的性能就差了好多,
返回結果集為10條的時候,15000qps。
結果集為20條的時候,8500qps。
結果集為100條的時候更是跌到了1600qps左右。
有點傷心。。
與上上周的調研結果相差不大。