Configuración
NamiDB se configura mediante variables de entorno y (para el servidor) un conjunto de flags de línea de comandos que reflejan esas variables. Los valores por defecto están bien para casi cualquier workload; las perillas de abajo son a las que recurres cuando estás cazando rendimiento o comportamiento.
La lista de abajo viene del
README del
proyecto, el README de
namidb-server
y el
CHANGELOG.
Env vars del motor
Estas aplican en cualquier lugar donde el motor corre — librería
embedded, CLI, namidb-server, cliente Python.
| Variable | Default | Qué hace |
|---|---|---|
NAMIDB_ADJACENCY | ON | Adyacencia CSR en RAM, compartida entre snapshots (RFC-018). |
NAMIDB_NODE_CACHE | ON | Caché de lookup de NodeView entre snapshots (RFC-019). |
NAMIDB_SST_CACHE | ON | Cuerpo del SST, streams de propiedades de aristas decodificados, y el EdgeSstReader parseado (RFC-020). |
NAMIDB_FACTORIZE | OFF | Resultados intermedios factorizados en el executor (RFC-017). Gana en consultas con muchos paths. |
NAMIDB_WCOJ | OFF | Worst-case-optimal join vía leapfrog triejoin (RFC-024). Requiere NAMIDB_FACTORIZE=1. Opcional. |
NAMIDB_PROFILE_DUMP | OFF | Vuelca contadores de perfil por etapa a stderr después de cada consulta. |
Cualquier valor distinto a 0 / OFF habilita un flag. Usa 1 o
ON para activarlo.
Env vars y flags del servidor
Estas las lee solo namidb-server. Cada flag tiene una env var
equivalente; el flag gana cuando ambos están seteados.
| Env var | Flag | Default | Qué hace |
|---|---|---|---|
NAMIDB_STORE | --store | (obligatorio) | URI de almacenamiento, ej. s3://bucket/data?ns=prod®ion=us-east-1. Misma gramática que cliente Python y CLI. |
NAMIDB_LISTEN | --listen | 0.0.0.0:8080 | Dirección de bind TCP para la API HTTP. |
NAMIDB_AUTH_TOKEN | --auth-token | sin setear (abierto) | Bearer token. Sin esto el servidor arranca sin autenticación con un warning ruidoso. |
NAMIDB_FLUSH_INTERVAL | --flush-interval | 30s | Cadencia del flush memtable → L0 en background. 0s lo desactiva y llamas /v0/admin/flush manualmente. |
NAMIDB_BOLT_LISTEN | --bolt-listen | sin setear (solo HTTP) | Dirección de bind TCP opcional para el listener Bolt 4.4 / 5.0 / 5.4. Ejemplo: 0.0.0.0:7687. |
Credenciales de backend
Estas no son específicas de NamiDB; son las env vars estándar de cada
vendor que lee el cliente object_store subyacente.
| Backend | Variables |
|---|---|
| AWS S3 | AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN (opcional), AWS_DEFAULT_REGION |
| Cloudflare R2 | AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY (token id / secret de R2), más URI endpoint=...®ion=auto |
| Google Cloud Storage | GOOGLE_APPLICATION_CREDENTIALS (ruta al JSON de service-account) — o pasa ?service_account=... en la URI |
| Azure Blob | AZURE_STORAGE_ACCOUNT_NAME, AZURE_STORAGE_ACCESS_KEY (y compañía). ?use_emulator=true para Azurite. |
| MinIO / LocalStack | AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, más URI endpoint=...&allow_http=true |
Permisos IAM que NamiDB pide en object stores: GetObject,
PutObject, DeleteObject, ListBucket. Nada más.
Logging
Los binarios en Rust (namidb, namidb-server) respetan RUST_LOG.
El docker-compose.yml que viene con el repo setea RUST_LOG=info
en el servicio namidb-server.
RUST_LOG=info,namidb_storage=debug namidb-server --store memory://demoCombinaciones comunes
Máximo rendimiento de lectura
NAMIDB_ADJACENCY=1 \NAMIDB_NODE_CACHE=1 \NAMIDB_SST_CACHE=1 \NAMIDB_FACTORIZE=1 \namidb-server --store "$NAMIDB_STORE" --listen 0.0.0.0:8080 --auth-token "$NAMIDB_AUTH_TOKEN"Activar el worst-case-optimal join
Para patrones Cypher cíclicos (triángulos, k-cliques, k-ciclos):
NAMIDB_FACTORIZE=1 NAMIDB_WCOJ=1 namidb-server …Sin NAMIDB_WCOJ=1 el planificador se queda con la cadena binaria
de hash-join (el default). Con esa env var, las cadenas contiguas de
Expand que forman un ciclo se pliegan en un solo MultiwayJoin
que ejecuta leapfrog triejoin.
Perfilar una consulta
NAMIDB_PROFILE_DUMP=1 namidb run --store memory://demo \ "MATCH (a:Person)-[:KNOWS]->(b) RETURN b"Los contadores de perfil se imprimen a stderr después de la consulta.
Externalizar el flush
Desactiva el loop en background y maneja los flushes desde un sidecar:
namidb-server \ --store "$NAMIDB_STORE" \ --listen 0.0.0.0:8080 \ --auth-token "$NAMIDB_AUTH_TOKEN" \ --flush-interval 0s
# desde cron / sidecarcurl -s -X POST http://localhost:8080/v0/admin/flush \ -H "Authorization: Bearer $NAMIDB_AUTH_TOKEN"Siguientes pasos
- Servidor HTTP — cada flag del servidor en contexto.
- Backends de almacenamiento — entrega de credenciales por backend.
- Docker + MinIO — un ejemplo concreto de cada env var de arriba en un solo archivo de compose.