kevy4.0

ベンチマーク

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

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

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

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

kevy 4.0Redis 8valkey 9.1DragonflyRedis 8 比
GET7,800,2995,597,8653,014,6872,132,2101.39×
SET6,918,0582,573,3961,749,9761,511,3772.69×
INCR6,133,9403,459,3952,484,2731,387,5681.77×
SADD5,600,5973,690,4832,385,8571,678,0981.52×
HSET4,287,2173,021,3251,970,7911,515,7631.42×
LPUSH3,213,4702,862,3741,943,2221,320,4971.12×
ZADD3,053,1012,773,9291,802,7591,455,1261.10×

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

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

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

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

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

ブラウザ向けビルド

タブに実際に配るもの。

サイズ
kevy.wasm416 KBエンジン本体、非圧縮
gzip 後151 KB回線を流れる量
コールドスタート< 20 msコンパイルとインスタンス化、キャッシュが温まった状態

小さな同期の読み取りでは、localStorage が kevy に勝ちます。今後もそうです——あれはページ自身のアドレス空間にあるマップです。kevy が勝つのは、そもそも localStorage を選ぶべきでない理由のほうです。本物の TTL、5 MB の上限がないこと、値が文字列ではなくバイト列であること、書き込みがメインスレッドを止めないこと。

再現する

スクリプトは 2 つ。このページの内容は、すべてそこから出てきます。
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