Después de seis años de desarrollo, se presenta la versión 1.0 de DuckDB, un sistema de gestión de bases de datos posicionado como una alternativa a SQLite para consultas analíticas. DuckDB combina características de SQLite, como su ligereza, la capacidad de ser integrado como una biblioteca, el almacenamiento de la base de datos en un solo archivo y una interfaz de línea de comandos amigable, con herramientas y optimizaciones para ejecutar consultas analíticas que abarcan una gran parte de los datos almacenados, como la agregación de todo el contenido de tablas o la fusión de varias tablas grandes. El código del proyecto está escrito en C++ y se distribuye bajo la licencia MIT.
La versión 1.0 se marca como el primer lanzamiento estable del proyecto, en el que el enfoque principal ha sido mejorar la estabilidad en lugar de aumentar la funcionalidad. En esta nueva versión, también se ha consolidado el formato de almacenamiento de datos, para el cual se garantiza la compatibilidad hacia atrás desde la versión anterior. En futuras versiones, los desarrolladores tienen la intención de ser más cautelosos al agregar nuevas características y de velar por mantener la compatibilidad entre las versiones, así como la estabilización del dialecto SQL y la API C. Si en el futuro es necesario cambiar la semántica de SQL, los desarrolladores publicarán con antelación una advertencia sobre los cambios que se avecinan y proporcionarán soluciones para mantener la funcionalidad del código existente.
DuckDB soporta un dialecto extendido de SQL, que incluye capacidades adicionales para manejar consultas muy complejas y de larga duración. Por ejemplo, es posible utilizar tipos complejos (arreglos, estructuras, uniones), así como realizar subconsultas correlacionadas arbitrarias e anidadas. También se admite la ejecución simultánea de múltiples consultas, así como la posibilidad de ejecutar consultas directamente desde archivos en formato CSV y Parquet. Hay soporte disponible para la importación desde bases de datos PostgreSQL.
Además del código de la interfaz de SQLite, el proyecto utiliza un analizador extraído en una biblioteca separada de PostgreSQL, el componente Date Math de MonetDB, su propia implementación de funciones de ventana (basada en el algoritmo de agregación Segment Tree), un procesador de expresiones regulares basado en la biblioteca RE2, un optimizador de consultas propio, un mecanismo MVCC de control de concurrencia de múltiples versiones (Multi-Version Concurrency Control), así como un motor de ejecución de consultas vectorizado basado en el algoritmo de Ejecución de Consultas Hyper-Pipelining, que permite procesar grandes conjuntos de valores en una sola operación.
Fuente: opennet.ru
