Store (Chave-Valor)
Store (Chave-Valor)
Seção intitulada “Store (Chave-Valor)”Armazenamentos chave-valor com suporte a TTL: em memória, com backend SQL e replicados em cluster (Raft e CRDT).
Tipos de Entradas
Seção intitulada “Tipos de Entradas”| Tipo | Descrição |
|---|---|
store.memory | Armazenamento em memória com limpeza automática |
store.sql | Armazenamento com backend SQL com persistência |
store.kv.raft | KV replicado em cluster, fortemente consistente, sobre o Raft compartilhado |
store.kv.crdt | KV replicado em cluster, eventualmente consistente, via gossip (CRDT) |
Armazenamento em Memória
Seção intitulada “Armazenamento em Memória”- name: sessions kind: store.memory max_size: 10000 cleanup_interval: "5m" lifecycle: auto_start: true| Campo | Tipo | Padrão | Descrição |
|---|---|---|---|
max_size | int | 10000 | Máximo de entradas (0 = ilimitado) |
cleanup_interval | duration | 5m | Intervalo de limpeza de entradas expiradas |
Quando max_size é atingido, novas entradas são rejeitadas. Dados são perdidos ao reiniciar.
Armazenamento SQL
Seção intitulada “Armazenamento SQL”- name: cache kind: store.sql database: app:postgres table_name: kv_store cleanup_interval: "10m" lifecycle: auto_start: true| Campo | Tipo | Padrão | Descrição |
|---|---|---|---|
database | referência | obrigatório | Referência da entrada de banco de dados |
table_name | string | obrigatório | Nome da tabela para armazenamento |
id_column_name | string | key | Coluna para chaves |
payload_column_name | string | value | Coluna para valores |
expire_column_name | string | expires_at | Coluna para expiração |
cleanup_interval | duration | 0 | Intervalo de limpeza de entradas expiradas |
Nomes de colunas são validados contra injeção SQL. Crie a tabela 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;Armazenamentos KV em Cluster {id=cluster-kv-stores}
Seção intitulada “Armazenamentos KV em Cluster {id=cluster-kv-stores}”store.kv.raft e store.kv.crdt replicam dados chave-valor entre os nós do cluster. Ambos exigem que o clustering esteja habilitado e reutilizam a mesma API Lua do Módulo Store. Cada entrada é uma visão com namespace de um único engine ao nível do nó; namespace isola as chaves desta entrada e deve corresponder a ^[a-z][a-z0-9._-]*$ (não pode começar com _).
Raft (consistência forte)
Seção intitulada “Raft (consistência forte)”- name: deployments kind: store.kv.raft namespace: deploy| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
namespace | string | Sim | Namespace de chaves no engine compartilhado |
Escritas são propostas através do Raft compartilhado (followers encaminham para o leader); leituras são linearizáveis. Escritas condicionais (put com only_if_absent/if_version) são suportadas. O estado do Raft é durável em disco por padrão, sob cluster.raft.data_dir (padrão ~/.wippy/store); veja Configuração.
CRDT (consistência eventual)
Seção intitulada “CRDT (consistência eventual)”- name: sessions kind: store.kv.crdt namespace: sess durable: false| Campo | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
namespace | string | Sim | - | Namespace de chaves |
durable | bool | Não | false | Persiste snapshots em disco para que o namespace sobreviva a um reinício de todo o cluster |
Escritas mutam o estado local e se disseminam via gossip; escritas concorrentes conflitantes convergem por last-writer-wins. Leituras são locais. Escritas condicionais não são suportadas. Com durable: false o armazenamento é em memória e reconstrói a partir dos peers; com durable: true ele faz snapshot em <data_dir>/_sys/kvcrdt.
data_dir é ao nível do nó (cluster.raft.data_dir), não por entrada. O estado do Raft compartilhado e os snapshots duráveis do CRDT ficam sob <data_dir>/_sys/.
Comportamento de TTL
Seção intitulada “Comportamento de TTL”Ambos os armazenamentos suportam time-to-live. Entradas expiradas persistem brevemente até a limpeza executar em cleanup_interval. Defina como 0 para desabilitar limpeza automática.
API Lua
Seção intitulada “API Lua”Veja Módulo Store para operações: get, set, has, delete, além de put, entry, list e info para acesso versionado e condicional.
Veja Também
Seção intitulada “Veja Também”- Módulo Store - Referência da API Lua
- Banco de Dados - Backend SQL para
store.sql