ベンチマーク
どれだけ速いか、そして、どこで速くないか
1 台のマシン、16 コア、ループバック。すべての数字は、リポジトリの bench/ から再現できます。何かを決める前に、最後の 2 行を読んでください——速さが乗り換える理由にならないのは、その 2 行です。
4 つのエンジン、1 台のマシン
コネクション 50、小さな値。5 回実行した中央値です。ベンチマーククライアントが報告する速度ではなく、各サーバー自身のコマンドカウンタを、3 秒間の定常状態で数えました。
| kevy 4.0 | Redis 8 | valkey 9.1 | Dragonfly | Redis 8 比 | |
|---|---|---|---|---|---|
| GET | 7,800,299 | 5,597,865 | 3,014,687 | 2,132,210 | 1.39× |
| SET | 6,918,058 | 2,573,396 | 1,749,976 | 1,511,377 | 2.69× |
| INCR | 6,133,940 | 3,459,395 | 2,484,273 | 1,387,568 | 1.77× |
| SADD | 5,600,597 | 3,690,483 | 2,385,857 | 1,678,098 | 1.52× |
| HSET | 4,287,217 | 3,021,325 | 1,970,791 | 1,515,763 | 1.42× |
| LPUSH | 3,213,470 | 2,862,374 | 1,943,222 | 1,320,497 | 1.12× |
| ZADD | 3,053,101 | 2,773,929 | 1,802,759 | 1,455,126 | 1.10× |
LPUSH は Redis 8 より 12%、ZADD は 10% 速いだけです。この差では、勝敗を決めるのはエンジンではなく、値のサイズとキーの分布です。リストやソート済みセットがホットパスなら、自分のワークロードで測ってください。速さを理由に乗り換えてはいけません。この 2 行の色は、そのために付けてあります。
この数字が、教えてくれないこと
ループバックです。ここにネットワークはありませんが、実際の運用で待たされる相手は、たいていネットワークです。GET が 2.6 倍速いエンジンでも、レイテンシの大半が回線なら、p99 が 2.6 倍良くなることはありません。
値が小さいです。1 値あたり 64 KB になると、全体がカーネルの TCP パスに律速され、差は 1 桁台まで縮まります。大きなブロブを保存するなら、この数字は、あなたの話ではありません。
1 台のマシンです。kevy にクラスタモードはありません。1 台では足りないことが問題なら、このページのどの数字も助けになりません。
ブラウザ向けビルド
タブに実際に配るもの。
| サイズ | ||
|---|---|---|
| kevy.wasm | 416 KB | エンジン本体、非圧縮 |
| gzip 後 | 151 KB | 回線を流れる量 |
| コールドスタート | < 20 ms | コンパイルとインスタンス化、キャッシュが温まった状態 |
小さな同期の読み取りでは、localStorage が kevy に勝ちます。今後もそうです——あれはページ自身のアドレス空間にあるマップです。kevy が勝つのは、そもそも localStorage を選ぶべきでない理由のほうです。本物の TTL、5 MB の上限がないこと、値が文字列ではなくバイト列であること、書き込みがメインスレッドを止めないこと。
再現する
git clone https://github.com/goliajp/kevy && cd kevy
# four-way: kevy, Redis 8, valkey, Dragonfly
bash bench/arena.sh
# the regression gate CI runs on every push
bash bench/perfgate.sh