Saltearse al contenido

MinIO

MinIO es un object store totalmente compatible con S3 que puedes ejecutar en tu propio hardware. NamiDB lo trata como otro backend s3:// detrás de un endpoint custom — el mismo cliente object_store::aws::AmazonS3, el mismo protocolo de escrituras condicionales.

Si quieres una receta de un solo archivo que levante MinIO y un daemon de NamiDB juntos, consulta Docker + MinIO. La página de abajo es para usar MinIO fuera de la receta de compose.

Forma de la URI

s3://<bucket>?ns=<namespace>&endpoint=<minio-url>&region=<region>&allow_http=true
  • endpoint= apunta al endpoint HTTP de MinIO (normalmente http://localhost:9000).
  • region= es requerido por el cliente S3; para MinIO cualquier string funciona (us-east-1 es lo convencional).
  • allow_http=true deja que el cliente hable HTTP — MinIO no sirve TLS por defecto.

Las credenciales vienen de las env vars estándar de AWS (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY).

Levantar MinIO localmente

El standalone más directo:

Ventana de terminal
docker run -p 9000:9000 -p 9001:9001 \
-e MINIO_ROOT_USER=minioadmin \
-e MINIO_ROOT_PASSWORD=minioadmin \
minio/minio server /data --console-address ":9001"

La consola está en http://localhost:9001 (login: minioadmin / minioadmin). La API S3 está en :9000.

Crea un bucket vía la CLI mc:

Ventana de terminal
mc alias set local http://localhost:9000 minioadmin minioadmin
mc mb local/namidb

Conectarse desde NamiDB

import os
import namidb
os.environ["AWS_ACCESS_KEY_ID"] = "minioadmin"
os.environ["AWS_SECRET_ACCESS_KEY"] = "minioadmin"
client = namidb.Client(
"s3://namidb?ns=prod"
"&endpoint=http://localhost:9000"
"&region=us-east-1"
"&allow_http=true"
)
Ventana de terminal
AWS_ACCESS_KEY_ID=minioadmin AWS_SECRET_ACCESS_KEY=minioadmin \
namidb run --store "s3://namidb?ns=prod&endpoint=http://localhost:9000&region=us-east-1&allow_http=true" \
"CREATE (a:Person {name: 'Alice'})"
use std::env;
use namidb::storage::{parse_uri, WriterSession};
env::set_var("AWS_ACCESS_KEY_ID", "minioadmin");
env::set_var("AWS_SECRET_ACCESS_KEY", "minioadmin");
let uri = "s3://namidb?ns=prod&endpoint=http://localhost:9000&region=us-east-1&allow_http=true";
let (store, paths) = parse_uri(uri)?;
let mut writer = WriterSession::open(store, paths).await?;

La misma forma, cualquier backend compatible con S3

La misma forma de URI funciona contra cualquier servicio compatible con S3 — Cloudflare R2, Tigris y LocalStack se conectan igual. Lo único que cambia es el valor de endpoint= (y allow_http=true para servicios HTTP plano como MinIO y LocalStack):

Servicioendpoint=allow_http=true?
MinIO (local)http://localhost:9000
LocalStackhttp://localhost:4566
Cloudflare R2https://<account>.r2.cloudflarestorage.com + region=autono
Tigrishttps://t3.storage.devno

Permisos IAM

NamiDB necesita el set mínimo de verbos S3:

  • s3:GetObject
  • s3:PutObject
  • s3:DeleteObject
  • s3:ListBucket

Sin tabla de locks en DynamoDB, sin servicio de metadatos aparte.

Siguientes pasos

  • Docker + MinIO — stack local completo (MinIO + namidb-server) en un solo archivo de compose.
  • Sistema de archivos local — cuando prefieres saltarte por completo la abstracción del bucket.
  • En memoria — para la prueba de 30 segundos sin configuración.