SQLite ha incorporado una funcionalidad que permite tratar la base de datos como un almacén documental mediante el uso de columnas generadas. Esta capacidad, disponible desde la versión 3.31.0 lanzada en enero de 2020, facilita insertar objetos JSON directamente y extraer campos específicos para su indexación y consulta. Este mecanismo ofrece a los desarrolladores una alternativa ligera a soluciones más pesadas como PostgreSQL o Elasticsearch, especialmente útil en aplicaciones embebidas donde la simplicidad y el rendimiento son prioritarios.
La implementación se basa en la definición de columnas virtuales que ejecutan funciones de extracción JSON automáticamente durante la inserción de datos. Por ejemplo, al crear una columna generada con la función json_extract, SQLite valida la integridad del JSON en tiempo real, rechazando entradas malformadas o que no cumplan restricciones como NOT NULL. Esto elimina la necesidad de validación externa compleja y garantiza la coherencia de los datos almacenados.
Además, estas columnas virtuales permiten crear índices eficientes sobre los campos extraídos, optimizando las consultas sin duplicar almacenamiento físico. Los desarrolladores pueden comenzar con una estructura mínima que contiene únicamente el JSON crudo y añadir columnas e índices progresivamente a medida que identifican patrones de uso relevantes. Este enfoque resulta particularmente eficaz para gestionar webhooks o logs estructurados, donde la flexibilidad del esquema es crucial. La opción de usar columnas STORED permite cachear valores para mejorar el rendimiento en lecturas frecuentes, aunque con la limitación de no poder añadirlas posteriormente mediante ALTER TABLE.
