ストア(キーバリュー)

TTLサポート付きのキーバリューストア: インメモリ、SQLバックエンド、クラスタレプリケート(Raft および CRDT)。

エントリ種別

種別 説明
store.memory 自動クリーンアップ付きインメモリストア
store.sql 永続化付きSQLバックエンドストア
store.kv.raft 共有 Raft 上のクラスタレプリケート、強整合性 KV
store.kv.crdt ゴシップ上のクラスタレプリケート、最終的整合性 KV(CRDT)

メモリストア

- name: sessions
  kind: store.memory
  max_size: 10000
  cleanup_interval: "5m"
  lifecycle:
    auto_start: true
フィールド デフォルト 説明
max_size int 10000 最大エントリ数(0 = 無制限)
cleanup_interval duration 5m 期限切れエントリのクリーンアップ間隔

max_sizeに達すると、新しいエントリは拒否されます。データは再起動時に失われます。

SQLストア

- name: cache
  kind: store.sql
  database: app:postgres
  table_name: kv_store
  cleanup_interval: "10m"
  lifecycle:
    auto_start: true
フィールド デフォルト 説明
database reference 必須 データベースエントリ参照
table_name string 必須 ストレージ用テーブル名
id_column_name string key キー用カラム
payload_column_name string value 値用カラム
expire_column_name string expires_at 有効期限用カラム
cleanup_interval duration 0 期限切れエントリのクリーンアップ間隔

カラム名はSQLインジェクションに対して検証されます。使用前にテーブルを作成してください:

CREATE TABLE kv_store (
    key VARCHAR(255) PRIMARY KEY,
    value BYTEA NOT NULL,
    expires_at BIGINT
);

CREATE INDEX idx_expires_at ON kv_store(expires_at) WHERE expires_at IS NOT NULL;

クラスタ KV ストア {id="cluster-kv-stores"}

store.kv.raftstore.kv.crdt はキーバリューデータをクラスタノード間でレプリケートします。どちらもクラスタリングが有効である必要があり、同じストアモジュールの Lua API を再利用します。各エントリはノード全体の単一エンジンへの名前空間付きビューです。namespace はこのエントリのキーを分離し、^[a-z][a-z0-9._-]*$ に一致する必要があります(_ で始めることはできません)。

Raft(強整合性)

- name: deployments
  kind: store.kv.raft
  namespace: deploy
フィールド 必須 説明
namespace string Yes 共有エンジン内のキー名前空間

書き込みは共有 Raft を通じて提案され(フォロワーはリーダーに転送)、読み取りは線形化可能です。条件付き書き込み(only_if_absent/if_version 付きの put)がサポートされます。Raft 状態はデフォルトで cluster.raft.data_dir(デフォルト ~/.wippy/store)の下に fs 永続化されます。設定を参照。

CRDT(最終的整合性)

- name: sessions
  kind: store.kv.crdt
  namespace: sess
  durable: false
フィールド 必須 デフォルト 説明
namespace string Yes - キー名前空間
durable bool No false fs スナップショットを永続化し、クラスタ全体の再起動後も名前空間が存続するようにする

書き込みはローカル状態を変更しゴシップ経由で伝播します。競合する並行書き込みは last-writer-wins で収束します。読み取りはローカルです。条件付き書き込みはサポートされません。durable: false ではストアはインメモリでありピアから再構築されます。durable: true では <data_dir>/_sys/kvcrdt にスナップショットされます。

data_dir はノードレベル(cluster.raft.data_dir)であり、エントリごとではありません。共有 Raft 状態と永続 CRDT スナップショットは <data_dir>/_sys/ の下に存在します。

TTL動作

両方のストアがtime-to-liveをサポートします。期限切れエントリはcleanup_intervalでクリーンアップが実行されるまで一時的に残ります。自動クリーンアップを無効にするには0に設定してください。

Lua API

操作についてはストアモジュールを参照してください: getsethasdelete、加えてバージョン管理付き・条件付きアクセスのための putentrylistinfo

関連項目