CapyDB Knight/Valkyrie

K/V

データのすぐ隣で、独立したセルの中で動くキーバリューストアとレートリミッターです。データベースがなくても問題なく使えます。

01

K/V とは

プロジェクトごとに 1 つ用意されるマネージドのキーバリューストアで、独自のセルの中で動きます。プロセスもメモリ上限もストレージも専用です。Valkey を利用し、HTTPS 上の Upstash REST プロトコルと、ワイヤ上の RESP という 2 つのプロトコルを話すため、すでにお持ちのクライアントが変更なしで動作します。

テーブルではなくカウンターが向いている仕事のためのものです。レート制限、セッション、キュー、フィーチャーフラグ、短命なキャッシュなどが該当します。Postgres でもすべて実現できますが、これほど安価にはできません。

02

レート制限

これが統合のすべてです。環境変数 2 つと、フレームワークがすでに想定しているリミッターだけです。認証情報の出どころ以外に CapyDB 固有のものはありません。

import { Ratelimit } from '@upstash/ratelimit'
import { Redis } from '@upstash/redis'

const ratelimit = new Ratelimit({
  redis: new Redis({
    url: process.env.CAPYDB_KV_REST_URL!,
    token: process.env.CAPYDB_KV_REST_TOKEN!,
  }),
  limiter: Ratelimit.slidingWindow(10, '10 s'),
})

export async function POST(request: Request) {
  const { success } = await ratelimit.limit(userIdFrom(request))
  if (!success) return new Response('Too many requests', { status: 429 })
  // ...
}

03

単体で使う

K/V はデータベースに付け足された機能ではなく、それ自体で完結した機能です。ストアを追加したうえで、隣のデータベースを一度も開かないという使い方ができます。設計するスキーマも、つなぐ接続文字列も、実行するマイグレーションもありません。レートリミッターだけがほしいアプリケーションは数多くあり、それも CapyDB の完結した使い方です。

それでもストアはプロジェクトに属します。課金、アクセス、リージョンを区切る単位がプロジェクトだからです。プロジェクトにはデータベースセルが残りますが、無視してかまいません。使われないセルは自動的に一時停止し、何も消費しません。

04

分離

K/V ストアはセルであり、データベースが得るのと同じランタイムの原始要素です。共有サーバー内の名前空間を言い換えたものではありません。

  • -専用のプロセスを持ち、メモリ上限と CPU の取り分はカーネルが強制します。隣の利用者があなたのメモリを使い切ることはできません。
  • -ストレージも認証情報もソケットも専用です。共有インスタンスも、衝突しうる共通のキー空間もありません。
  • -到達できるのは認証済みエンドポイント経由のみです。ストア自体はインターネットにも、あなたのデータベースにも経路を持ちません。

05

互換性

いずれも標準の 2 つのプロトコルに対応しているため、移行は URL とトークンを差し替えるだけです。

  • -Upstash の REST プロトコル。パイプライン、トランザクション、base64 エンコードを含み、@upstash/redis と @upstash/ratelimit が既定の設定のまま動作します。
  • -RESP。ioredis、node-redis、redis-py、go-redis、redis-cli といった一般的な Redis® OSS クライアント向けで、ブロッキングコマンドと Pub/Sub にも対応します。
  • -Valkey を利用しています。Redis は Redis Ltd. の登録商標です。CapyDB は Redis Ltd. と提携しておらず、同社の推奨も受けていません。

06

容量

K/V はすべてのプランに、そのプランの容量で含まれます。K/V 単独のサブスクリプションも、コマンドごとの課金もありません。以下の数値がストアに保存できる量です。

  • -CapyDB Vibe: 32 MB
  • -CapyDB Ship: 128 MB
  • -CapyDB Business: 512 MB

07

永続性について正直に

K/V ストアは定期的なスナップショットを保持するため再起動には耐えますが、データベースではありません。バックアップも、ポイントインタイムリカバリも、レプリカもありません。ストアが満杯になれば、退避ポリシーがキーを破棄します。

高速で使い捨ての状態として扱ってください。カウンター、セッション、キャッシュ、ロックなどが向いています。失って困るものは、バックアップとポイントインタイムリカバリを備えた隣のデータベースセルに置いてください。

08

はじめかた

ダッシュボードでプロジェクトの K/V タブからストアを追加してください。数秒でプロビジョニングされ、エンドポイントとトークンが一度だけ表示されます。トークンはハッシュとしてのみ保存されるため、その場でコピーしてください。