ReboFilesDocs
Empezar3
Qué es ReboFiles
Primeros pasos
Demos para ejecutar
Ponlo en tu app6
Componente de React
Headless: tu propia interfaz
Sin framework
Estilos y temas
Teclado y accesibilidad
Idiomas
Archivos9
Subidas
Vistas previas y el visor
Búsqueda
Cambios en vivo y carpetas grandes
Comentarios
Destacados y campos
Versiones, papelera y espacio
Descargar como .zip
Documentos de Word
El servidor14
La ruta
Frameworks e inicio de sesión
Quién puede hacer qué
Almacenamiento: S3, GCS, Azure y disco
Revisar las subidas
Metadatos: SQLite y Postgres
Esquema de la base de datos
Compartir y enlaces
Actividad y notificaciones
Ganchos, registros y límites
Retención, bloqueos y exportación
Escritorio y otros orígenes
Sincronizar una carpeta
Ir a producción
En equipo1
Asistentes de IA (MCP)
Referencia5
Paquetes
Componentes y hooks
API del cliente
Rutas HTTP
Estado y hoja de ruta
↑↓ para moverte↵ para abrirEsc para cerrar38 páginas

El servidor Metadatos: SQLite y Postgres

Metadatos: SQLite y Postgres

Un bucket no tiene carpetas, propietarios, permisos ni papelera. Eso va en un almacén de metadatos aparte, que escribe solo lo que cambió, un cambio a la vez.
Elige

Los almacenes

AlmacénPara
memoryMetadata()Tests y demos: desaparece al terminar el proceso.
sqliteMetadata(path)Una aplicación en un solo servidor: un archivo, con el propio node:sqlite de Node.
postgresMetadata(pool)Más de un servidor, o un alojamiento sin disco: tu driver, y un bloqueo de la base de datos por cada cambio.
Postgres

En Postgres

import pg from 'pg';
import { postgresMetadata } from '@rebofiles/server';

metadata: await postgresMetadata(new pg.Pool({ connectionString: process.env.DATABASE_URL })),

Acepta cualquier cosa con query(text, values) que responda { rows }: pg, el Pool de Neon, PGlite. Con un pool, cada cambio mantiene un bloqueo de la base de datos mientras lee y escribe, así que dos servidores nunca cambian el drive a la vez; sin él, dos carpetas creadas en el mismo momento podrían ser ambas “(2)”. { table: 'acme_files' } para una tabla con otro nombre.

Tablas

Qué se guarda

  • Las entradas, una fila cada una, como JSON.
  • Los ajustes del drive y de cada persona, y las contraseñas de los enlaces tal como las hace scrypt.
  • La actividad, una fila por línea, encontrada por la entrada y las carpetas de las que trata.
  • El texto de cada archivo: la búsqueda de texto completo de SQLite, o un tsvector en Postgres.
  • Una revisión que sube con cada cambio, para que cada proceso sepa cuándo volver a leer el drive.
Tuyo

Un almacén propio

MetadataStore es load() y save(changes); revision, lock, los ajustes, record/activity y keepText/findText son opcionales, y sin ellos el servidor guarda eso en el proceso. Esquema de la base de datos tiene todas las tablas.

Escala

Por partes

SQLite, Postgres y el store en memoria responden lo que cada petición necesita, y nada más: una entrada y las carpetas sobre ella, lo que hay en una carpeta, lo que hay bajo otra, una búsqueda por nombre, la papelera, lo compartido con alguien. El drive nunca se carga entero, y un cambio escribe solo lo que tocó. Lo que cambió otro proceso se lee de la actividad que guardan.

Cien personas, dos mil archivos cada unaTardó
La raíz del drive de uno13 ms
Una carpeta de 2.000 archivos22 ms
Una búsqueda por nombre35 ms
Mover un archivo8 ms

Las columnas y tablas por las que se pregunta se añaden a una base hecha antes de ellas la primera vez que se abre, y las filas se rellenan una vez. Un store propio hace lo mismo con scoped; sin él, se guarda entero en memoria, como antes.