コンテンツにスキップ

ストア(キーバリュー)

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_sizeint10000最大エントリ数(0 = 無制限)
cleanup_intervalduration5m期限切れエントリのクリーンアップ間隔

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

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

カラム名は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”}

Section titled “クラスタ KV ストア {id=“cluster-kv-stores”}”

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

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

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

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

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

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

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

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