ROMA-Key Value Store (KVS) ベンチマーク結果
ROMAを使ったNoSQLベンチマークの解剖
今日、LevelDB, RocksDB, Redis と、バックエンドにRubyhash, Tokyo Cabinet(TC) および Groonga を使ったROMAのパフォーマンスを比較するために行った新しいNoSQLベンチーマクの結果を発表できるのはうれしいです。
クライアント & 次善策 の説明
オペレーティングシステム | CentOS Release 6.5 |
Kernel | 2.6.32-431.el6.x86_64 |
CPU | Intel(R) Xeon(R) CPU X5650 @ 2.67GHz - 2 cores |
RAM | 4 GB |
NIC | 1.25 Gb/s |
ハードウェアタイプ | VMWare Hypervisor base Virtual Machine |
ベンチマークツール | Yahoo Cloud Service Benchmark(YCSB) tool |
注意: クライアントとサーバとして同じマシーンを使用しました。ネットワークの遅延を避けるために、全てのキーバリューストアのデフォルトの設定を使用しました。
DATA SETS
データはYCSBツールの"load"句を使ってデータベースのロードしました。各データベースについて2要素のリプリケーションを使い、そのため各レコードは2回格納されました。
レコードの説明 | 各レコードは10個文字列フィールドから成り、各10バイトの長さと2バイトの名前を持ちます。 |
レコードサイズ | 120 バイト |
キーの説明 | キーは、単語"user"の後ろに64ビットのFowlerNoll-Vo hash4(indecimal 記法)が続きます。 |
キーサイズ | 23 バイト |
注意: レコードはテストにおいてネットワークの帯域が要因にならないように意図的に小さくしています。
作業負荷
3つの作業負荷を実行しました: 安定した読み書きの作業負荷と、重い読み込みの作業負荷です。各作業負荷のために、ランダムなzipfian分散を使ってレコードは選択されました。This distribution selects a small subset of popular records very frequently while the majority is hit infrequently with a roughly long tail.5 It is intended to approximate Internet usage where a large number of users are active at a given time and using a user’s random cookie ID as the key. For each of the workloads, we began each test by running a brief warm-up period to prime any caches. これは実行中のプロダクションシステムに似たシステムへの計測を開始しようとしたためです。
- Workload A - 安定したテスト
- READ operation: 50%
- UPDATE operation: 50%
- Workload B - READが多いテスト
- READ operation: 95%
- UPDATE operation: 5%
- Workload C - READ のみのテスト
- READ operation: 100%
The number of operations actually performed depended on the throughput achievable on each test. 各作業負荷は最小200000レコードがメモリに読み込まれ、作業負荷A,B,Cのために1,2,4,8のスレッドを使って20000回の操作が行われました。
特例として大きなデータの場合:
大きなデータの場合として特別に作られたテストケース。このテストのために、150万レコードのinsert, update および readを使用します。そして、例えば レイテンシ、ディスク上のデータサイズ、スループットおよび完了までの総実行時間の異なるパラメータを観察しました。全てのこの操作は6クライアントスレッドとデータリプリケーション1および2を使って行いました。
注意: Redisの場合、この制限されたリソースを使って全ての操作を完了することに失敗しました。ですので、redisについては作業負荷Dを記入することができませんでした。
作業負荷Cのレイテンシ
Workload C Latency ==> R:100% | ||||||
---|---|---|---|---|---|---|
スレッド | 1 | 2 | 4 | 8 | 16 | 32 |
Redis | 271 | 336 | 614 | 1200 | 2677 | 5522 |
LevelDB | 202 | 229 | 488 | 982 | 193 | 3013 |
RocksDB | 211 | 245 | 511 | 1039 | 2006 | 3817 |
ROMA-TC | 231 | 312 | 623 | 1076 | 2246 | 4782 |
ROMA-GR | 254 | 369 | 671 | 1246 | 2591 | 5021 |
ROMA-RH | 230 | 339 | 584 | 1189 | 2414 | 5057 |
注意: すべての数値はマイクロ秒です
作業負荷Cのスループット
Workload C Throughput ==> R:100% | ||||||
---|---|---|---|---|---|---|
スレッド | 1 | 2 | 4 | 8 | 16 | 32 |
Redis | 3271 | 5355 | 5732 | 6117 | 5699 | 5554 |
LevelDB | 4350 | 7450 | 7506 | 7400 | 7388 | 7275 |
RocksDB | 4132 | 7053 | 7069 | 7126 | 7205 | 7127 |
ROMA-TC | 3757 | 5123 | 5428 | 6049 | 5955 | 5819 |
ROMA-GR | 3448 | 4656 | 5091 | 5446 | 5510 | 5554 |
ROMA-RH | 3808 | 5011 | 5730 | 6055 | 5859 | 5496 |
作業負荷Dの大きなデータの場合の特別なテスト
150万レコードへの操作 | RocksDB | LevelDB | ROMA-TC (R=2) | ROMA-TC (R=1) | ROMA-GR (R=2) | ROMA-GR (R=1) | ROMA-RH (R=1) | |
---|---|---|---|---|---|---|---|---|
INSERT | 実行時間(分) | 8.57 | 8.84 | 7.85 | 4.13 | 6.2 | 3.19 | 3.12 |
スループット (ops/sec) | 2917 | 2827 | 3168 | 6053 | 4030 | 7822 | 7989 | |
DB サイズ (GB) | 1.6 | 1.8 | 3.2 | 1.7 | 3.0 | 1.6 | 0.0 | |
平均レイテンシ(us) | 1959 | 2011 | 1885 | 982 | 1480 | 757 | 757 | |
READ | 実行時間(分) | 3.19 | 3.35 | 2.65 | 2.91 | 2.77 | 2.64 | 2.57 |
スループット (ops/sec) | 7818 | 7457 | 9408 | 8579 | 8997 | 9447 | 9727 | |
平均レイテンシ(us) | 730 | 767 | 629 | 691 | 659 | 627 | 608 | |
UPDATE | 実行時間(分) | 7.26 | 7.3 | 6.3 | 3.1 | 5.59 | 2.81 | 2.7 |
スループット (ops/sec) | 3442 | 3422 | 3967 | 8037 | 4471 | 8866 | 9240 | |
平均レイテンシ(us) | 1692 | 1703 | 1503 | 737 | 1333 | 668 | 640 |
INSERT
READ
UPDATE
Redis 作業負荷 A & B の結果
200,000 レコード | WorkLoad - A | WorkLoad - B | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Target | スレッド | 1 | 2 | 4 | 8 | 1 | 2 | 4 | 8 | |||||||||
500 | オペレーション | R | U | R | U | R | U | R | U | R | U | R | U | R | U | R | U | |
待ち時間 | Min | 222 | 215 | 223 | 218 | 222 | 219 | 220 | 222 | 230 | 233 | 225 | 221 | 223 | 237 | 224 | 235 | |
最大 | 19861 | 19916 | 47661 | 20920 | 22205 | 20202 | 22801 | 22567 | 19922 | 487 | 19773 | 684 | 45286 | 19794 | 53322 | 1282 | ||
平均 | 280 | 255 | 289 | 261 | 294 | 262 | 325 | 313 | 284 | 247 | 302 | 267 | 316 | 301 | 326 | 307 | ||
スループット | OK | OK | OK | OK | OK | OK | OK | OK | ||||||||||
1000 | 待ち時間 | Min | 275 | 212 | 222 | 213 | 213 | 214 | 216 | 215 | 222 | 230 | 225 | 267 | 222 | 227 | 223 | 230 |
最大 | 19901 | 20000 | 45610 | 19650 | 20127 | 20838 | 22714 | 22566 | 35105 | 19603 | 48294 | 2767 | 50583 | 19500 | 50855 | 22135 | ||
平均 | 278 | 254 | 290 | 257 | 311 | 294 | 318 | 290 | 277 | 284 | 302 | 267 | 326 | 319 | 324 | 310 | ||
スループット | OK | OK | OK | OK | OK | OK | OK | OK | ||||||||||
2000 | 待ち時間 | Min | 221 | 214 | 220 | 211 | 215 | 211 | 217 | 214 | 228 | 230 | 219 | 232 | 223 | 225 | 216 | 225 |
最大 | 35382 | 247192 | 35416 | 19897 | 52900 | 20768 | 35590 | 23989 | 35651 | 1395 | 44449 | 19666 | 23192 | 19664 | 45979 | 21199 | ||
平均 | 267 | 249 | 315 | 295 | 342 | 317 | 353 | 346 | 276 | 243 | 319 | 308 | 342 | 320 | 363 | 383 | ||
スループット | OK | OK | OK | OK | OK | OK | OK | OK | ||||||||||
4000 | 待ち時間 | Min | 225 | 218 | 218 | 219 | 211 | 212 | 212 | 215 | 231 | 230 | 219 | 226 | 219 | 221 | 218 | 225 |
最大 | 19845 | 34784 | 39846 | 20178 | 50004 | 40332 | 59424 | 59200 | 34948 | 806 | 35148 | 966 | 46238 | 20009 | 58463 | 22129 | ||
平均 | 271 | 240 | 324 | 300 | 377 | 388 | 435 | 483 | 278 | 241 | 310 | 296 | 387 | 386 | 469 | 449 | ||
スループット | 3400 | 3951 | 3937 | 3940 | 3293 | 3952 | 3944 | 3938 | ||||||||||
8000 | 待ち時間 | Min | 220 | 219 | 219 | 217 | 218 | 217 | 223 | 212 | 232 | 229 | 220 | 228 | 218 | 233 | 222 | 235 |
最大 | 19872 | 20159 | 33426 | 19968 | 42679 | 23726 | 57686 | 40691 | 35822 | 487 | 35141 | 496 | 59678 | 20493 | 52577 | 33681 | ||
平均 | 274 | 246 | 339 | 328 | 584 | 669 | 1000 | 1478 | 279 | 241 | 336 | 324 | 617 | 692 | 1153 | 1670 | ||
スループット | 3412 | 5186 | 5676 | 6058 | 3310 | 5204 | 5662 | 6131 |