選ぶ
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 のドロップイン置き換えになりますか
SCAN はカーソルによる反復ではありません。1 回の呼び出しでキースペース全体を走査してカーソル 0 を返すので、いつもの SCAN ループは 1 往復で終わります。ZRANK は O(N) です。ソート済みセットに順位の索引を持たないからです。SPOP と SRANDMEMBER はランダムではなく、毎回同じ要素を返します。シャードをまたぐ RENAME は原子的ではありません。184 個すべてのコマンドに、本当の差異と本当のコストを併記してあります。Redis の文書から書き写したものではなく、実装から読み出したものです。マシンが落ちたら、どうなりますか
everysec の fsync なら、強制終了で失うのは最大 1 秒分の書き込みです。appendfsync = "always" にすれば失うものはありませんが、スループットを代償に払います。スナップショットは、再生にかかる時間を抑えるためだけに存在します。永続化のガイドに数字があります。マシン障害を生き延びられますか
WAIT、read-your-writes トークン、上限つきの遅延)。得られないのは、マシンをまたぐデータのシャーディングです。レプリカはコピーであって、切片ではありません。可用性のガイドに、フェイルオーバーでどの書き込みが生き残り、どれが生き残らないのかを明記してあります。認証はありますか
手狭になったら、あるいは気が変わったら
kevy-cli export がキースペースをプレーンな RESP ファイルに書き出し、Redis 互換のサーバーなら、どれでもそれを取り込めます。そして kevy-cli digest が、何かを捨ててしまう前に、コピーが忠実であることを証明します。移行ガイドは、入ってくる手順と同じ丁寧さで、出ていく手順も扱っています。playground を開いてください。WebAssembly にコンパイルされた本物の kevy エンジンが、あなたのタブの中で動いています。キーを書き、TTL が切れていく様子を眺め、自分のディスクに置かれた追記専用ログを覗いてみてください。録画ではありませんし、サーバーも介在しません。