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")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ásrename(2). - Dos procesos pueden abrir un
WriterSessioncontra la misma URIfile://; 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 syncdel directorio a un bucket real — el layout en el bucket es idéntico.
Siguientes pasos
- En memoria — para tests que no necesitan persistencia.
- MinIO — cuando quieres un bucket local compatible con S3 en vez de archivos planos.
- Embedded (Python) y
Servidor HTTP — ambos funcionan
contra URIs
file://.