kevy
ドキュメント

ドキュメント

すべての章を、読む順に。各章はリポジトリ内の markdown ファイルそのもので、ここで読めるものと GitHub が表示するものは同じ文章です。

はじめに

kevyの上にアプリケーションを設計する

テーブルで考えることに慣れた頭で、キーで考え直す。

RDS→kevyモデリング・クックブック

そのまま動くレシピ —— セッション、レート制限、キュー、ランキング、フィード。

永続化

append-only ログ、スナップショット、そして kill -9 の後に何が残るか。

kevyのチューニング

shard、コネクション、そして本当に効く二つのフラグ。

運用

6.2 から 6.3 へのアップグレード

HRANDFIELD、ワイヤ越しに設定できる keyspace イベント、4 つの RESP3 の形、そして訂正された GEOPOS の応答 1 件。

6.2.0 から 6.2.1 へのアップグレード

サーバーは無変更。2 つのクライアント crate がようやくエンジンと同じ番号で crates.io に届く。

5.1 から 5.2 へのアップグレード

5.1 を止め、同じディレクトリで 5.2 を起動——Lua の方言が上流と一致します。

5.0 から 5.1 へのアップグレード

5.0 を止めて同じディレクトリで 5.1 を起動——読み出しハザードを修復し、停止を 2 つ除去。

4.x から 5.0 へのアップグレード

4.1.1 を止めて同じディレクトリで 5.0 を起動——変わる挙動はこれだ。

以前のメジャーバージョンのアップグレード

以前のメジャー——2.x から 3.x、および 3.x から 4.0。

レプリケーション

一つの primary と N 個の replica、そして嘘をつかない offset。

可用性

failover、epoch、そして我々が守ると約束しない書き込み。

クラスタ

cluster が無い理由と、代わりに何をするか。

透過的ティアリング([tiering] / with_tier_budget*)

RAM より大きなストアに RAM 予算を——コールドな値はディスクへ、コマンドはそのまま。

--accept-shards N — スパースなコネクションをシャードの部分集合に畳む

listener を持つ core を減らして 10.6% を買ったフラグ。

kevy-alloc——オプトインのアロケータ:得られるもの、支払うもの

オプトインのアロケータ —— RSS 約 10% 減、代価は正直に値札どおり。

Unixドメインソケット(UDS)トランスポート

Unix ドメインソケット —— TCP も loopback も kernel コピーも無い。

非同期クライアント

pipelining と、このエンジンに async runtime が無い理由。

データ

セカンダリインデックス(IDX.* / idx_*)

セカンダリインデックス —— どう構築され、何を払うのか。

テーブル(TABLE.* / table_*)

型付きカラムとインデックスを一度宣言すれば、テーブルのように引ける —— kevy の速度で。

手書きインデックスからテーブルへ移行する

手書きインデックスを置き換えた 8 つの教訓 —— どれも本番で対価を払った。

ベクトル検索(KIND ann)

キー空間の上での KNN。embedding モデルは含まない。

全文検索(KIND text)

BM25 全文検索と、その限界。

ビュー(VIEW.* / view_*)

マテリアライズドビュー。書き込みパスが鮮度を保つ。

CDC — 変更フィード(FEED.* / changes_since)

別プロセスから tail できる変更フィード。

Pub/sub

チャンネル、パターン、そして遅い購読者に何が起きるか。

Luaスクリプティング

EVAL —— 自前で書いたインタープリタの上で。

packed-rows — 宣言済みの行を 1 回の確保に収める

宣言済みの行を 1 回の確保に。節約になるかを決めるのは順序のほう。

組み込み

WebAssembly上のkevy

ブラウザのタブに 151 KB、OPFS へ永続化。

組み込みの読み取り専用RESPリスナー

組み込みつつ、socket では RESP を話す。

IoTデバイス上のkevy

no_std、アロケータ無し、OS 無し。

クライアント

リファレンス

kevy がやらないこと

kevy が拒むもの、その理由、代わりに使うもの——推測の上に作り始める前に。

エラーリプライ・カタログ

すべてのエラー文字列と、それが属する契約。

kevy上のRDSワークロード

リレーショナルなワークロードがここで払う代価を、正直に。

移行——プレイブックとツールチェーン

Redis から移ってくる道と、出ていく道。

コマンドリファレンス

コマンドリファレンス

エンジンが応答するすべての動詞。ディスパッチに使う表から生成しています。