YCSB, Yahoo! Cloud Service Benchmark について
YCSBは、米Yahoo!の研究開発部部門 Yahoo! Research が開発し、オープンソースで公開されているNoSQLデータベースを対象としたベンチマークツールです。異なる種類のNoSQLデータベースに対して共通的な負荷シナリオとフレームワークの提供を目的として開発されています。負荷シナリオに関しては自分で定義することも可能ですが、5種類のシナリオが事前に定義されています。
Workload | Title | シナリオの内容 | 想定するアプリケーション |
---|---|---|---|
Workload A | Update heavy workload | 50%の読み込みと50%の書き込み | 最近のアクションを記録するセッションストア |
Workload B | Read mostly workload | 95%の読み込みと5%の書き込み | 写真へのタグ付け。タグの追加は更新だが、ほとんどがタグの読み取り |
Workload C | Read only | 100%の読み込み | ユーザ設定のキャッシュ |
Workload D | Read latest workload | 新しいデータが追記され、新しく追記されたものほど読み込まれやすい | ユーザの近況アップデート。新しいものほどよく読まれる |
Workload E | Short ranges | データをレンジで読み込み | スレッドに分かれた会話。1回の読み込みは1つのスレッド |
Workload F | Read-modify-write | データを読み込み、変更し、書き込む | ユーザ情報のデータベース |
YCSBの利用
実際にYCSBを利用します。ベンチマーク対象はCassandra(2.1.12)とします。Cassandraのインストールに関しては記事等をご参考ください。
2016/2/1の最新版はYCSB 0.6.0なのでそれをダウンロードして展開します。
user@node:~$ wget https://github.com/brianfrankcooper/YCSB/releases/download/0.6.0/ycsb-0.6.0.tar.gz
user@node:~$ tar zxvf ycsb-0.6.0.tar.gz
user@node:~$ cd ycsb-0.6.0/
予め、ベンチーマークに必要なキースペースとテーブルを作成します。
user@node:~/ycsb-0.6.0$ cqlsh
cqlsh> CREATE KEYSPACE ycsb
WITH REPLICATION = {'class' : 'SimpleStrategy', 'replication_factor': 1 };
cqlsh> USE ycsb;
cqlsh:ycsb> CREATE TABLE usertable (
y_id varchar primary key,
field0 varchar,
field1 varchar,
field2 varchar,
field3 varchar,
field4 varchar,
field5 varchar,
field6 varchar,
field7 varchar,
field8 varchar,
field9 varchar);
実際にWorkload Aでベンチマークを実行します。
user@node:~/ycsb-0.6.0$ ./bin/ycsb load cassandra2-cql -P workloads/workloada -p "hosts=127.0.0.1"
user@node:~/ycsb-0.6.0$ ./bin/ycsb run cassandra2-cql -P workloads/workloada -p "hosts=127.0.0.1"
結果は下記のように表示され [OVERALL], Throughput(ops/sec)
が今回のシナリオに対するスループットになります。
[OVERALL], RunTime(ms), 4225.0
[OVERALL], Throughput(ops/sec), 236.68639053254438
[READ], Operations, 482.0
[READ], AverageLatency(us), 3508.0290456431535
[READ], MinLatency(us), 471.0
[READ], MaxLatency(us), 28127.0
[READ], 95thPercentileLatency(us), 9503.0
[READ], 99thPercentileLatency(us), 19791.0
[READ], Return=OK, 482
[CLEANUP], Operations, 1.0
[CLEANUP], AverageLatency(us), 15684.0
[CLEANUP], MinLatency(us), 15680.0
[CLEANUP], MaxLatency(us), 15687.0
[CLEANUP], 95thPercentileLatency(us), 15687.0
[CLEANUP], 99thPercentileLatency(us), 15687.0
[UPDATE], Operations, 518.0
[UPDATE], AverageLatency(us), 2767.6177606177607
[UPDATE], MinLatency(us), 407.0
[UPDATE], MaxLatency(us), 36511.0
[UPDATE], 95thPercentileLatency(us), 7891.0
[UPDATE], 99thPercentileLatency(us), 11415.0
[UPDATE], Return=OK, 518