DuckDB-Wasm permite bases de datos persistentes en el navegador

Fuentes: DuckDB-Wasm enables persistent databases in the browser

DuckDB-Wasm ha incorporado soporte para el Origin Private File System (OPFS), permitiendo a las aplicaciones web almacenar bases de datos persistentes directamente en el navegador. Esta funcionalidad, disponible en versiones 1.32.0 y posteriores, resuelve la limitación histórica de la herramienta, que hasta ahora requería serializar datos a Parquet y almacenarlos en IndexedDB para sobrevivir a recargas de página. Al utilizar el OPFS, un sistema de archivos aislado por origen, DuckDB-Wasm crea archivos .duckdb estándar con registro de escritura anticipada (write-ahead log) y puntos de control, que persisten incluso tras el cierre de la pestaña o el reinicio del navegador.

La implementación requiere instalar una versión específica de la librería, como la 1.32.0 o las dev64.0 de la serie 1.33, ya que versiones anteriores o en desarrollo pueden generar archivos vacíos sin persistencia real. El código de apertura es similar al de las bases de datos en memoria, pero utiliza el prefijo 'opfs://' para indicar al motor que resuelva la ruta contra el sistema de archivos privado del origen. Esto permite no solo guardar la base de datos, sino también cargar conjuntos de datos remotos mediante peticiones de rango HTTP y cachear resultados derivados en archivos Parquet dentro del OPFS, eliminando la necesidad de redescargar datos en cada sesión.

Para gestionar estos archivos, DuckDB-Wasm ofrece dos modos: uno automático que registra las rutas 'opfs://' encontradas en las consultas SQL, y otro manual que requiere registrar cada archivo individualmente. El modo manual es preferido para aplicaciones con muchas consultas pequeñas para evitar la adquisición repetida de manijas de acceso. La durabilidad sigue los principios nativos de DuckDB, aunque los desarrolladores deben ser conscientes de que las pestañas del navegador rara vez se cierran de forma limpia, lo que puede afectar la recuperación de datos tras un error de cierre.