Ir al contenido

Store (Clave-Valor)

Almacenes clave-valor con soporte TTL: en memoria, respaldados por SQL y replicados en cluster (Raft y CRDT).

TipoDescripción
store.memoryAlmacén en memoria con limpieza automática
store.sqlAlmacén respaldado por SQL con persistencia
store.kv.raftKV replicado en cluster, fuertemente consistente, sobre el Raft compartido
store.kv.crdtKV replicado en cluster, eventualmente consistente, sobre gossip (CRDT)
- name: sessions
kind: store.memory
max_size: 10000
cleanup_interval: "5m"
lifecycle:
auto_start: true
CampoTipoPor DefectoDescripción
max_sizeint10000Entradas máximas (0 = ilimitado)
cleanup_intervalduration5mIntervalo de limpieza de entradas expiradas

Cuando se alcanza max_size, se rechazan nuevas entradas. Los datos se pierden al reiniciar.

- name: cache
kind: store.sql
database: app:postgres
table_name: kv_store
cleanup_interval: "10m"
lifecycle:
auto_start: true
CampoTipoPor DefectoDescripción
databasereferenciarequeridoReferencia de entrada de base de datos
table_namestringrequeridoNombre de tabla para almacenamiento
id_column_namestringkeyColumna para claves
payload_column_namestringvalueColumna para valores
expire_column_namestringexpires_atColumna para expiración
cleanup_intervalduration0Intervalo de limpieza de entradas expiradas

Los nombres de columna se validan contra inyección SQL. Cree la tabla antes de usar:

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;

Almacenes KV de Cluster {id=cluster-kv-stores}

Sección titulada «Almacenes KV de Cluster {id=cluster-kv-stores}»

store.kv.raft y store.kv.crdt replican datos clave-valor entre los nodos del cluster. Ambos requieren que el clustering esté habilitado y reutilizan la misma API Lua del Módulo Store. Cada entrada es una vista con namespace sobre un único motor a nivel de nodo; namespace aísla las claves de esta entrada y debe coincidir con ^[a-z][a-z0-9._-]*$ (no puede comenzar con _).

- name: deployments
kind: store.kv.raft
namespace: deploy
CampoTipoRequeridoDescripción
namespacestringNamespace de claves en el motor compartido

Las escrituras se proponen a través del Raft compartido (los seguidores las reenvían al líder); las lecturas son linealizables. Se soportan escrituras condicionales (put con only_if_absent/if_version). El estado de Raft es durable en disco por defecto bajo cluster.raft.data_dir (por defecto ~/.wippy/store); ver Configuración.

- name: sessions
kind: store.kv.crdt
namespace: sess
durable: false
CampoTipoRequeridoPor DefectoDescripción
namespacestring-Namespace de claves
durableboolNofalsePersiste snapshots en disco para que el namespace sobreviva a un reinicio completo del cluster

Las escrituras mutan el estado local y se diseminan por gossip; las escrituras concurrentes en conflicto convergen mediante last-writer-wins. Las lecturas son locales. No se soportan escrituras condicionales. Con durable: false el almacén está en memoria y se reconstruye desde los peers; con durable: true toma snapshots en <data_dir>/_sys/kvcrdt.

data_dir es a nivel de nodo (cluster.raft.data_dir), no por entrada. El estado de Raft compartido y los snapshots durables de CRDT residen bajo <data_dir>/_sys/.

Ambos almacenes soportan tiempo de vida. Las entradas expiradas persisten brevemente hasta que la limpieza se ejecuta en cleanup_interval. Establezca a 0 para deshabilitar la limpieza automática.

Consulte el Módulo Store para operaciones: get, set, has, delete, además de put, entry, list e info para acceso versionado y condicional.