Caches
NamiDB distribuye tres caches process-wide que comparten datos entre
snapshots. Los tres son Arc-shared y tienen presupuesto por bytes.
| Cache | Qué contiene | RFC | Variable de entorno |
|---|---|---|---|
| AdjacencyCache | Arrays de CSR adjacency por SST de aristas | RFC-018 | NAMIDB_ADJACENCY |
| NodeViewCache | Lookups de NodeView decodificado (id → label, props) | RFC-019 | NAMIDB_NODE_CACHE |
| SstCache | Cuerpo de SST decodificado + streams de propiedades de aristas + EdgeSstReader parseado | RFC-020 | NAMIDB_SST_CACHE |
Los tres están ON por defecto. Para deshabilitarlos, poner la
variable de entorno en 0 o off.
Por qué cross-snapshot
Un workload de escritura long-running produce una nueva versión del manifest en cada commit. Sin caches cross-snapshot, cada transición de snapshot invalidaría el cache entero y volvería a pagar el costo de decode.
Los caches de NamiDB están keyados por el SST id inmutable, no por el snapshot. Mientras un SST esté referenciado por algún snapshot vivo, sus artefactos decodificados se quedan en cache.
Dimensionamiento
Los presupuestos por defecto están tuneados para una “laptop cómoda”: ~512 MiB por cache. Para workloads de servidor, subirlos:
export NAMIDB_ADJACENCY_BUDGET_MB=4096export NAMIDB_NODE_CACHE_BUDGET_MB=2048export NAMIDB_SST_CACHE_BUDGET_MB=8192Para uso embebido, quizás convenga hacerlos más chicos — todos están acotados por evicción.
Observabilidad
El cliente de Python expone:
print(client.cache_stats())# {# "adjacency": {"hits": ..., "misses": ..., "bytes": ...},# "node_view": {...},# "sst": {...}# }Conectar esto a los dashboards para detectar mismatches de working set vs presupuesto.
Hybrid cache (opcional)
NamiDB embebe foyer para un tier
opcional de memoria + NVMe — mantiene el working set caliente en RAM
y derrama las páginas tibias a NVMe local. Útil cuando los round-trips al
bucket son lentos (cross-region) o caros (fees de egress).