SQLite 3.45 ya fue liberado y estas son sus novedades
Se ha publicado el lanzamiento de SQLite 3.45, el motor de base de datos relacional liviano accesible a través del lenguaje SQL. A diferencia de los servidores de bases de datos tradicionales, como MySQL o PostgreSQL, su particularidad es no reproducir el esquema cliente-servidor habitual, sino integrarse directamente en los programas.
Gracias a su extrema ligereza, SQLite es uno de los motores de bases de datos más utilizados en el mundo. Se utiliza en muchos programas de consumo y también es muy popular en los sistemas integrados, incluidos los teléfonos inteligentes más modernos.
Principales novedades de SQLite 3.45
En esta nueva versión que se presenta de SQLite 3.45, se destaca que se han realizado importantes actualizaciones en las funciones SQL relacionadas con el manejo de datos en formato JSON. Estas funciones han sido reescritas y migradas al nuevo formato interno de árbol de análisis JSONB, la cual se serializa y puede ser almacenada directamente en la base de datos, además de que esta actualización evita la necesidad de análisis repetidos al trabajar con valores JSON, lo que mejora significativamente el rendimiento y la eficiencia de las consultas que involucran datos en formato JSON.
En las nuevas versiones de las funciones de generación JSON, se ha implementado un cambio importante: ahora generan datos en formato binario JSONB en lugar de en formato de texto. Esto representa una mejora en la optimización y manipulación de los datos JSON en el sistema.
Además, se ha introducido un segundo argumento opcional en la función json_valid(). Este argumento permite especificar una máscara de bits que define las características de un JSON válido. Por ejemplo, al especificar 0x04, se reconocerá un objeto JSONB como válido. Asimismo, al especificar 0x01, se considerará válido el texto JSON en formato RFC-8259. La opción 0x05 permite reconocer ambas opciones.
Por defecto, la optimización SQLITE_DIRECT_OVERFLOW_READ está habilitada, la cual permite leer directamente desde el archivo las páginas de desbordamiento que son más grandes que el tamaño estándar de la página del árbol b, sin pasar por el caché. Sin embargo, si se desea deshabilitar esta optimización durante la compilación, se puede utilizar la opción «-DSQLITE_DIRECT_OVERFLOW_READ=0».
El planificador de consultas ha experimentado mejoras significativas en la eficiencia de la optimización de restricciones transitivas. Esto permite que el motor de consultas optimice mejor las consultas al considerar restricciones transitivas y mejorar la capacidad de ignorar índices que se consideran de baja calidad durante la operación «ANALYZE». Estas mejoras ayudan a garantizar un rendimiento óptimo y una ejecución eficiente de las consultas en la base de datos SQLite.
Por otro lado en Windows, la interfaz de línea de comandos ha sido actualizada para mejorar la visualización de contenido codificado en UTF-8. Esto asegura una experiencia más consistente y legible al interactuar con la base de datos a través de la línea de comandos en entornos Windows. Además, se ha habilitado la detección automática del uso de la CLI al reproducir scripts «.dump» y se han realizado los cambios necesarios en las configuraciones, como «.dbconfig defensive off» y «.dbconfig dqs_dll on», para garantizar un funcionamiento óptimo.
Finalmente, se ha introducido la propiedad SQLITE_RESULT_SUBTYPE a las funciones SQL definidas del lado de la aplicación. Esto permite llamar a sqlite3_result_subtype() desde la función para inspeccionar los subtipos de argumentos, lo que brinda una mayor flexibilidad y capacidad de inspección en la manipulación de datos en la aplicación.
De los demás cambios que se destacan:
- FTS5 con opción tokendata: Se ha agregado la opción tokendata a la tabla virtual FTS5, que se utiliza para la búsqueda de texto completo.
- Modo de registro de transacciones WAL2: Se han introducido versiones experimentales de SQLite con un nuevo modo de registro de transacciones denominado WAL2 («PRAGMA journal_mode = wal2»). Este modo utiliza dos archivos wal («database-wal» y «database-wal2») en lugar de uno, lo que aborda el problema del crecimiento descontrolado del archivo wal en situaciones donde las transacciones no se confirman durante mucho tiempo o hay procesos de lectura prolongados.
- En este modo, al escribir datos en la base de datos, los nuevos datos se agregan al primer archivo wal. Cuando este archivo alcanza un tamaño suficientemente grande, se comienza a escribir en el segundo archivo. Después de cambiar al segundo archivo wal, el primero está disponible para cambios y sobrescrituras. Este ciclo se repite, lo que resuelve el problema del crecimiento descontrolado del archivo wal.
- Cambios en el procesamiento JSON: Los cambios en la manipulación de datos JSON han causado una incompatibilidad con versiones anteriores y han llevado a la terminación de ciertas construcciones para cargar datos JSON de archivos.
Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.