1 台のマシン、16 コア、ループバック。すべての数字は、リポジトリの bench/ から再現できます。何かを決める前に、最後の 2 行を読んでください——速さが乗り換える理由にならないのは、その 2 行です。
コネクション 50、パイプライン 16、小さな値、エンジンごとに 4 コア。15 ウィンドウ(5 ウィンドウを 3 ラウンド)の中央値です。ベンチマーククライアントが報告する速度ではなく、各サーバー自身のコマンドカウンタを、3 秒間のウィンドウで数えました。≥ の付いた数字は負荷生成側が追いつかなかったときの値で、エンジンは少なくともその速さが出ます。競合のそうした数字には倍率を付けていません。
| kevy 7.0.0 | Redis 8.10.2 | valkey 9.1.2 | Dragonfly 2.0.0 | Redis 8.10.2 比 | |
|---|---|---|---|---|---|
| GET | 8,726,283 | 5,467,748 | 4,041,855 | ≥ 3,364,079 | *1.60× |
| SET | ≥ 7,409,590 | 2,861,941 | 2,011,380 | 2,019,740 | *≥ 2.59× |
| INCR | 7,249,946 | 3,788,318 | 2,750,827 | 2,223,491 | *1.91× |
| SADD | 6,919,570 | 4,204,106 | 2,728,331 | 1,911,038 | *1.65× |
| HSET | ≥ 5,393,670 | 3,352,393 | 2,283,589 | 1,964,211 | *≥ 1.61× |
| LPUSH | 4,424,738 | 3,220,774 | 2,260,722 | 1,700,519 | *1.37× |
| ZADD | ≥ 4,980,252 | 3,112,253 | 2,159,811 | 1,804,781 | *≥ 1.60× |
LPUSH は Redis 8.10.2 より 37% 速く、いちばん差の小さい行です。この差では、値のサイズとキーの分布がエンジンと同じくらい効きます。リストがホットパスなら、速さを理由に乗り換える前に、自分のワークロードで測ってください。
ループバックです。ここにネットワークはありませんが、実際の運用で待たされる相手は、たいていネットワークです。GET が 2 倍速いエンジンでも、レイテンシの大半が回線なら、p99 が 2 倍良くなることはありません。
値が小さいです。1 値あたり 64 KB になると、全体がカーネルの TCP パスに律速され、差は 1 桁台まで縮まります。大きなブロブを保存するなら、この数字は、あなたの話ではありません。
1 台のマシンです。kevy にクラスタモードはありません。1 台では足りないことが問題なら、このページのどの数字も助けになりません。
タブに実際に配るもの。
| サイズ | ||
|---|---|---|
| kevy.wasm | 1865 KB | エンジン本体、非圧縮 |
| gzip 後 | 639 KB | 回線を流れる量 |
| コールドスタート | < 20 ms | コンパイルとインスタンス化、キャッシュが温まった状態 |
小さな同期の読み取りでは、localStorage が kevy に勝ちます。今後もそうです——あれはページ自身のアドレス空間にあるマップです。kevy が勝つのは、そもそも localStorage を選ぶべきでない理由のほうです。本物の TTL、5 MB の上限がないこと、値が文字列ではなくバイト列であること、書き込みがメインスレッドを止めないこと。
git clone https://github.com/goliajp/kevy && cd kevy
cargo build --release -p kevy
# four-way: kevy, Redis 8, valkey, Dragonfly
bash bench/arena.sh target/release/kevy
# two kevy builds side by side: the last release against this tree
bash bench/perfgate.sh compare last-release HEADスクリプトは 2 つ。このページの内容は、すべてそこから出てきます。