AƱadieron en SQLite el soporte WASM para usar el DBMS en un navegador web

SQLite

es un sistema de gestión de bases de datos relacional compatible con ACID, contenida en una relativamente pequeña biblioteca escrita en C

Los desarrolladores de SQLite estÔn desarrollando un proyecto para implementar la capacidad de compilar la biblioteca en un código WebAssembly intermedio que puede ejecutarse en un navegador web y es adecuado para organizar el trabajo con la base de datos desde aplicaciones web en el lenguaje JavaScript.

El objetivo del proyecto es proporcionar un enlace de JavaScript funcional que sea idéntico en funcionalidad a la API de SQLite. Los desarrolladores web cuentan con una interfaz orientada a objetos de alto nivel para trabajar con datos al estilo de sql.js o Node.js, envolviendo una API C de bajo nivel y una API basada en el mecanismo Web Worker que permite para crear controladores asincrónicos que se ejecutan en hilos separados.

Para ocultar las complejidades de organizar el trabajo con subprocesos sobre la API basada en Web Worker, también se estÔ desarrollando una variante de la interfaz de programación basada en el mecanismo Promise.

Los datos que las aplicaciones web almacenan en la versión WASM de SQLite pueden localizarse dentro de la sesión actual (perderse después de recargar la pÔgina) o persistir en el lado del cliente (persistir entre sesiones).

Para el almacenamiento permanente, se han preparado backends para colocar datos en un sistema de archivos local utilizando OPFS (Origin-Private FileSystem, extensióna la API de acceso al sistema de archivos, actualmente solo disponible en navegadores basados ​​en WebKit y Chromium) y almacenamiento local del navegador basado en las API window.localStorage y window.sessionStorage.

Cuando se usa localStorage/sessionStorage, los datos se asignan a los almacenamientos de clave/valor apropiados, mientras que cuando se usa OPFS, hay dos opciones: simular un FS virtual usando WASMFS y una implementación separada de sqlite3_vfs que ofrece una capa SQLite VFS basada en OPFS.

El compilador Emscripten se usa para construir SQLite en una representación WASM. El resultado son los archivos sqlite3.js y sqlite3.wasm que puede incluir en su proyecto de JavaScript (ejemplo de HTML y JavaScript).

De los objetivos en concreto de este proyecto se mencionan:

Excepto donde se indique en los no objetivos, proporcione un envoltorio mƔs o menos completo de caracterƭsticas para la API C de sqlite3, en la medida en que lo permita la paridad de caracterƭsticas de WASM con C. De hecho, proporcione al menos las siguientes API.

  • Vincule una API sqlite3 de bajo nivel que sea lo mĆ”s cercana posible a la nativa en tĆ©rminos de uso.
  • Una API OO de nivel superior, mĆ”s parecida a las implementaciones de estilo sql.js y node.js.
  • Una API basada en trabajadores que se comunica con las API anteriores a travĆ©s de mensajes de trabajadores. Este estĆ” diseƱado para usarse en el subproceso principal, con las API de nivel inferior instaladas en un subproceso de Worker y comunicarse con ellas a travĆ©s de mensajes de Worker.
  • Una variante basada en Promise de Worker API que oculta por completo los aspectos de comunicación entre subprocesos del usuario.
  • En la medida de lo posible, admita el almacenamiento persistente del lado del cliente utilizando las API de JS disponibles. Al momento de escribir este artĆ­culo, eso incluye el sistema de archivos privado de origen (OPFS) y el almacenamiento (muy limitado) a travĆ©s de los backends window.localStoragey .window.sessionStorage

En cuanto a los objetivos no especĆ­ficos:

  • Como WASM es una tecnologĆ­a centrada en la web y UTF-8 es el rey de las codificaciones en ese Ć”mbito, no hay planes actuales para admitir las API sqlite3 relacionadas con UTF16.
  • Aunque la compatibilidad con los tiempos de ejecución de WASM fuera del navegador estĆ” muy extendida, este proyecto actualmente (finales de 2022) se centra solo en los objetivos del navegador. Aunque los detalles de implementación relacionados con la web tienen prioridad, y los componentes de JavaScript de la API se centran especĆ­ficamente en los clientes del navegador, el módulo WASM de nivel inferior Ā«deberĆ­aĀ» funcionar en entornos WASM que no sean web.
  • Compatibilidad con plataformas antiguas o de nicho de mercado. WASM estĆ” diseƱado para una web moderna y requiere plataformas modernas. Del mismo modo, las opciones de la biblioteca sqlite3 que han quedado en desuso se eliminarĆ”n por completo de la interfaz WASM.

El código para la compatibilidad con WebAssembly se ha agregado al repositorio principal del proyecto. A diferencia de la API de WebSQL, que se basa en SQLite, WASM SQLite estÔ completamente aislado del navegador y no afecta su seguridad (Google decidió dejar de admitir WebSQL en Chrome después de varias vulnerabilidades en SQLite que podrían explotarse a través de WebSQL para atacar el navegador).

Finalmente si estƔs interesado en poder conocer mas al respecto, puedes consultar los detalles en el siguiente enlace.


AƱadir como fuente preferida en Google