kevy
kevy 7.0.0 · ベンチマーク

どれだけ速いか、そして、どこで速くないか

1 台のマシン、16 コア、ループバック。すべての数字は、リポジトリの bench/ から再現できます。何かを決める前に、最後の 2 行を読んでください——速さが乗り換える理由にならないのは、その 2 行です。

4 つのエンジン、1 台のマシン

コネクション 50、パイプライン 16、小さな値、エンジンごとに 4 コア。15 ウィンドウ(5 ウィンドウを 3 ラウンド)の中央値です。ベンチマーククライアントが報告する速度ではなく、各サーバー自身のコマンドカウンタを、3 秒間のウィンドウで数えました。≥ の付いた数字は負荷生成側が追いつかなかったときの値で、エンジンは少なくともその速さが出ます。競合のそうした数字には倍率を付けていません。

kevy 7.0.0Redis 8.10.2valkey 9.1.2Dragonfly 2.0.0Redis 8.10.2 比
GET8,726,2835,467,7484,041,855≥ 3,364,079*1.60×
SET≥ 7,409,5902,861,9412,011,3802,019,740*≥ 2.59×
INCR7,249,9463,788,3182,750,8272,223,491*1.91×
SADD6,919,5704,204,1062,728,3311,911,038*1.65×
HSET≥ 5,393,6703,352,3932,283,5891,964,211*≥ 1.61×
LPUSH4,424,7383,220,7742,260,7221,700,519*1.37×
ZADD≥ 4,980,2523,112,2532,159,8111,804,781*≥ 1.60×

LPUSH は Redis 8.10.2 より 37% 速く、いちばん差の小さい行です。この差では、値のサイズとキーの分布がエンジンと同じくらい効きます。リストがホットパスなら、速さを理由に乗り換える前に、自分のワークロードで測ってください。

この数字が、教えてくれないこと

ループバックです。ここにネットワークはありませんが、実際の運用で待たされる相手は、たいていネットワークです。GET が 2 倍速いエンジンでも、レイテンシの大半が回線なら、p99 が 2 倍良くなることはありません。

値が小さいです。1 値あたり 64 KB になると、全体がカーネルの TCP パスに律速され、差は 1 桁台まで縮まります。大きなブロブを保存するなら、この数字は、あなたの話ではありません。

1 台のマシンです。kevy にクラスタモードはありません。1 台では足りないことが問題なら、このページのどの数字も助けになりません。

ブラウザ向けビルド

タブに実際に配るもの。

サイズ
kevy.wasm1865 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 つ。このページの内容は、すべてそこから出てきます。