Saltearse al contenido

Sistema de archivos local

file:// abre un namespace en un directorio local. NamiDB envuelve object_store::local::LocalFileSystem con su propio LocalFileObjectStore, que agrega locking por flock por namespace y rename(2) atómico para implementar manifest CAS — la misma primitiva de corrección que las escrituras condicionales de S3 te dan en un bucket real.

Úsalo para deployments en una sola máquina, fixtures de CI que necesitan persistencia, trabajo de dev sin bucket, y en cualquier lugar donde un object store completo sea excesivo.

Forma de la URI

Ruta absoluta:

file:///abs/dir?ns=<namespace>

Ruta relativa:

file://./rel?ns=<namespace>

El file:/// inicial (tres slashes) va seguido de la ruta absoluta; file://./ (dos slashes más ./) arranca desde el directorio de trabajo actual.

Ejemplos

import namidb
# Ruta absoluta.
client = namidb.Client("file:///var/lib/namidb?ns=prod")
# Ruta relativa.
client = namidb.Client("file://./data?ns=dev")
Ventana de terminal
namidb run --store "file:///var/lib/namidb?ns=prod" \
"CREATE (a:Person {name: 'Alice'})"
namidb run --store "file:///var/lib/namidb?ns=prod" \
"MATCH (p:Person) RETURN p.name"
use namidb::storage::{parse_uri, WriterSession};
let (store, paths) = parse_uri("file:///var/lib/namidb?ns=prod")?;
let mut writer = WriterSession::open(store, paths).await?;

Concurrencia

El backend local implementa el mismo invariante single-writer-per-namespace que los backends en la nube:

  • El compare-and-swap sobre el manifest usa flock(2) más rename(2).
  • Dos procesos pueden abrir un WriterSession contra la misma URI file://; el primero que haga commit gana, el segundo ve una época vencida.
  • El backend local pasa la misma suite de tests de concurrencia que el backend s3://.

Permisos

NamiDB necesita permiso de lectura, escritura y flock sobre el directorio que le apuntes. El directorio se crea en la primera apertura si falta (semántica de mkdir -p intermedios).

Un namespace file:// es solo un árbol de directorios. Los backups son cp -r, rsync, tar, o cualquier cosa que preserve el contenido de archivos.

Cuándo elegir file://

  • Desarrollo. Sin bucket que configurar.
  • Fixtures de CI. Persistente a lo largo de múltiples procesos en el mismo test job; determinístico, repetible.
  • Deployments en una sola máquina. Cuando la durabilidad acotada por tu disco es suficiente.
  • Staging de migración. Construyes un namespace local y luego aws s3 sync del directorio a un bucket real — el layout en el bucket es idéntico.

Siguientes pasos