Após seis anos de desenvolvimento, o lançamento do SGBD DuckDB 1.0 foi apresentado, posicionado como uma alternativa ao SQLite para consultas analíticas. O DuckDB combina características do SQLite, como compactação, possibilidade de conexão na forma de uma biblioteca embutida, armazenamento do banco de dados em um único arquivo e uma interface de linha de comando amigável, com ferramentas e otimizações para a execução de consultas analíticas que abrangem uma parte significativa dos dados armazenados, como a agregação de todo o conteúdo das tabelas ou a fusão de várias tabelas grandes. O código do projeto é escrito em C++ e é distribuído sob a licença MIT.
A versão 1.0 é marcada como o primeiro lançamento estável do projeto, no qual o foco principal foi aumentar a estabilidade, em vez de expandir a funcionalidade. Na nova versão, também foi fixado o formato de armazenamento de dados, para o qual, a partir do lançamento passado, foi garantida a compatibilidade retroativa. Nos lançamentos futuros, os desenvolvedores pretendem ser mais cautelosos ao adicionar novas funcionalidades e cuidar da preservação da compatibilidade entre os lançamentos, assim como estabilizar o dialecto SQL e a API C. Se no futuro for necessária alguma alteração na semântica SQL, os desenvolvedores publicarão um aviso antecipado sobre as mudanças iminentes e fornecerão soluções alternativas para manter a funcionalidade do código existente.
O DuckDB suporta um dialecto SQL expandido, incluindo recursos adicionais para o processamento de consultas muito complexas e de longa duração. Por exemplo, é possível utilizar tipos complexos (arrays, estruturas, uniões), assim como executar subconsultas correlacionadas arbitrárias e aninhadas. É suportada a execução simultânea de várias consultas, a execução de consultas diretamente de arquivos nos formatos CSV e Parquet. O suporte à importação de SGBDs PostgreSQL também está disponível.
Além do código de shell do SQLite, o projeto utiliza um parser separado da biblioteca PostgreSQL, o componente Date Math do MonetDB, sua própria implementação de funções de janelas (baseada no algoritmo Segment Tree Aggregation), um manipulador de expressões regulares baseado na biblioteca RE2, seu próprio otimizador de consultas, um mecanismo de controle de concorrência de múltiplas versões (Multi-Version Concurrency Control), bem como um motor de execução de consultas vetorizado baseado no algoritmo Hyper-Pipelining Query Execution, permitindo processar grandes conjuntos de valores em uma única operação.
Fonte: opennet.ru
