kevy4.0

選ぶ

kevy を使うべきでしょうか

使うべきでない場合もあります。ここでは、実際に判断する順番どおりに並べます。そもそもキーバリューという形が正しいのか。データはどこに置かれる必要があるのか。そして、何を差し出すことになるのか。

まず——キーバリューという形は、正しいか

キーが分かっているなら、kevy を使ってください。セッション ID、ユーザー ID、キューの名前、キャッシュキー。読み取りは問い合わせではなく参照です。これは思われているよりも広い範囲を覆います。さらにセカンダリインデックスとマテリアライズドビューが、問い合わせのいくつかも参照に変えます。

読み取りが本当にクエリなら、kevy を使わないでください。5 つのテーブルにまたがる結合、アドホックな分析、無関係な行にまたがり本物の分離レベルを要求するトランザクション——それは PostgreSQL の仕事であり、PostgreSQL に留めておくべきです。リレーショナルな各ワークロードが、ここでいくらかかるかを書いてあります。答えが「やめておきなさい」になるものも含めて。

1 台で足りないなら、kevy を使わないでください。クラスタモードはなく、今後もできません。1 台の kevy は毎秒数百万回の操作をこなし、たいていの製品が到達する上限よりも余裕がありますが、それを超えたらシャーディングするものが必要です。kevy は、それではありません。

次に——データは、どこに置かれる必要があるか

これが形を決めます。どの行でも、コマンドは同じです。

状況選ぶもの理由
複数のサービスがデータを共有するサーバー1 プロセス、ポートで RESP。既存の Redis クライアントが、そのまま接続できます。
1 つのプログラムがデータを所有する組み込みソケットも、2 つ目のプロセスも、シリアライズも要りません。ラウンドトリップではなく、関数呼び出しです。
データはユーザーの端末のものブラウザ151 KB の WebAssembly。本物の TTL と pub/sub があり、ブラウザのファイルシステムに永続化されます。オフラインでも動きます。
リクエストごとに、エッジで動くエッジ暖機するものも、張りにいく接続もありません。ストアは、コードと同じ isolate の中にあります。
OS もヒープもないデバイスベアメタルkevy-store は no_std です。固定 arena のみ、アロケータなし。CI が push のたびに Cortex-M で起動させています。

選んだら固定される、というものではありません。組み込み API とワイヤプロトコルは同じ操作を公開しているので、プロセス内ストアで手狭になったプログラムは、データベースの開き方を変えるだけでサーバーに移れます。使い方を書き直す必要はありません。

最後に——何を差し出すことになるか

本当に Redis のドロップイン置き換えになりますか
ワイヤの上では、なります。RESP2 と RESP3、184 個のコマンドに対応し、クライアントライブラリは違いに気づきません。挙動もおおむね同じですが、その例外こそが要点です。SCAN はカーソルによる反復ではありません。1 回の呼び出しでキースペース全体を走査してカーソル 0 を返すので、いつもの SCAN ループは 1 往復で終わります。ZRANK は O(N) です。ソート済みセットに順位の索引を持たないからです。SPOPSRANDMEMBER はランダムではなく、毎回同じ要素を返します。シャードをまたぐ RENAME は原子的ではありません。184 個すべてのコマンドに、本当の差異と本当のコストを併記してあります。Redis の文書から書き写したものではなく、実装から読み出したものです。
マシンが落ちたら、どうなりますか
書き込みはすべて、まず追記専用ログに入り、起動時にログが再生されます。既定の everysec の fsync なら、強制終了で失うのは最大 1 秒分の書き込みです。appendfsync = "always" にすれば失うものはありませんが、スループットを代償に払います。スナップショットは、再生にかかる時間を抑えるためだけに存在します。永続化のガイドに数字があります。
マシン障害を生き延びられますか
はい。プライマリ 1 台とレプリカ N 台で、本物のフェイルオーバーがあります。計画的な引き継ぎ、エポックによるフェンシングを伴うクラッシュ時の選出、そして任意で選べる一貫性の段階(WAIT、read-your-writes トークン、上限つきの遅延)。得られないのは、マシンをまたぐデータのシャーディングです。レプリカはコピーであって、切片ではありません。可用性のガイドに、フェイルオーバーでどの書き込みが生き残り、どれが生き残らないのかを明記してあります。
認証はありますか
ありません。今後もありません。AUTH も ACL も TLS も、恒久的に対象外です。kevy はプライベートなネットワークで動かすか、それらを正しく行うプロキシの後ろに置いてください。中途半端な認証層は、正直に何もないことよりも悪いものです。人に信頼させてしまうからです。
手狭になったら、あるいは気が変わったら
kevy-cli export がキースペースをプレーンな RESP ファイルに書き出し、Redis 互換のサーバーなら、どれでもそれを取り込めます。そして kevy-cli digest が、何かを捨ててしまう前に、コピーが忠実であることを証明します。移行ガイドは、入ってくる手順と同じ丁寧さで、出ていく手順も扱っています。
まだ決められませんか

playground を開いてください。WebAssembly にコンパイルされた本物の kevy エンジンが、あなたのタブの中で動いています。キーを書き、TTL が切れていく様子を眺め、自分のディスクに置かれた追記専用ログを覗いてみてください。録画ではありませんし、サーバーも介在しません。