kevy
kevy 6.3.0 · ベンチマーク

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

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

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

コネクション 50、小さな値。5 回実行した中央値です。ベンチマーククライアントが報告する速度ではなく、各サーバー自身のコマンドカウンタを、3 秒間の定常状態で数えました。

kevy 6.3.0Redis 8.10.1valkey 9.1.2Dragonfly 1.40.2Redis 8.10.1 比
GET7,489,1195,631,3982,980,7642,845,704*1.33×
SET6,824,6622,567,6071,683,2271,943,358*2.66×
INCR6,753,5583,294,9272,279,7381,953,406*2.05×
SADD6,152,6173,753,1312,214,6591,899,967*1.64×
HSET4,002,5802,966,2881,857,5321,773,498*1.35×
LPUSH3,142,6992,860,3061,859,2651,505,141!1.10×
ZADD3,242,9672,818,6261,786,2301,794,335!1.15×

LPUSH は Redis 8.10.1 より 10%、ZADD は 15% 速いだけです。この差では、勝敗を決めるのはエンジンではなく、値のサイズとキーの分布です。リストやソート済みセットがホットパスなら、自分のワークロードで測ってください。速さを理由に乗り換えてはいけません。この 2 行の色は、そのために付けてあります。

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

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

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

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

ブラウザ向けビルド

タブに実際に配るもの。

サイズ
kevy.wasm1442 KBエンジン本体、非圧縮
gzip 後481 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

スクリプトは 2 つ。このページの内容は、すべてそこから出てきます。