Saltearse al contenido

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.

VariableDefaultQué hace
NAMIDB_ADJACENCYONAdyacencia CSR en RAM, compartida entre snapshots (RFC-018).
NAMIDB_NODE_CACHEONCaché de lookup de NodeView entre snapshots (RFC-019).
NAMIDB_SST_CACHEONCuerpo del SST, streams de propiedades de aristas decodificados, y el EdgeSstReader parseado (RFC-020).
NAMIDB_FACTORIZEOFFResultados intermedios factorizados en el executor (RFC-017). Gana en consultas con muchos paths.
NAMIDB_WCOJOFFWorst-case-optimal join vía leapfrog triejoin (RFC-024). Requiere NAMIDB_FACTORIZE=1. Opcional.
NAMIDB_PROFILE_DUMPOFFVuelca 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 varFlagDefaultQué hace
NAMIDB_STORE--store(obligatorio)URI de almacenamiento, ej. s3://bucket/data?ns=prod&region=us-east-1. Misma gramática que cliente Python y CLI.
NAMIDB_LISTEN--listen0.0.0.0:8080Dirección de bind TCP para la API HTTP.
NAMIDB_AUTH_TOKEN--auth-tokensin setear (abierto)Bearer token. Sin esto el servidor arranca sin autenticación con un warning ruidoso.
NAMIDB_FLUSH_INTERVAL--flush-interval30sCadencia del flush memtable → L0 en background. 0s lo desactiva y llamas /v0/admin/flush manualmente.
NAMIDB_BOLT_LISTEN--bolt-listensin 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.

BackendVariables
AWS S3AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN (opcional), AWS_DEFAULT_REGION
Cloudflare R2AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY (token id / secret de R2), más URI endpoint=...&region=auto
Google Cloud StorageGOOGLE_APPLICATION_CREDENTIALS (ruta al JSON de service-account) — o pasa ?service_account=... en la URI
Azure BlobAZURE_STORAGE_ACCOUNT_NAME, AZURE_STORAGE_ACCESS_KEY (y compañía). ?use_emulator=true para Azurite.
MinIO / LocalStackAWS_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.

Ventana de terminal
RUST_LOG=info,namidb_storage=debug namidb-server --store memory://demo

Combinaciones comunes

Máximo rendimiento de lectura

Ventana de terminal
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):

Ventana de terminal
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

Ventana de terminal
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:

Ventana de terminal
namidb-server \
--store "$NAMIDB_STORE" \
--listen 0.0.0.0:8080 \
--auth-token "$NAMIDB_AUTH_TOKEN" \
--flush-interval 0s
# desde cron / sidecar
curl -s -X POST http://localhost:8080/v0/admin/flush \
-H "Authorization: Bearer $NAMIDB_AUTH_TOKEN"

Siguientes pasos