YCSBの概要とCassandraへのベンチマーク


## 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回の読み込みは１つのスレッド |
| Workload F | Read-modify-write | データを読み込み、変更し、書き込む | ユーザ情報のデータベース | 

## YCSBの利用

実際にYCSBを利用します。ベンチマーク対象はCassandra(2.1.12)とします。Cassandraのインストールに関しては[記事](http://qiita.com/noralife/items/47b5e6da6befbd8e0d10)等をご参考ください。

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
```

## 参考
* [YCSBでNoSQLのベンチマーク　その1](http://imai-factory.hatenablog.com/entry/2013/03/24/174624)
* [YCSBでNoSQLのベンチマーク　その2](http://imai-factory.hatenablog.com/entry/2013/04/05/010858)
* [ベンチマークツール YCSB メモ](http://blog.cloudpack.jp/2015/02/23/memo-about-ycsb-that-is-benchmark-tool/)
* [Benchmarking Cloud Serving Systems with YCSB](https://www.cs.duke.edu/courses/fall13/compsci590.4/838-CloudPapers/ycsb.pdf)