Dopo sei anni di sviluppo, è stata presentata la versione del DBMS DuckDB 1.0, posizionata come un'alternativa a SQLite per le query analitiche. DuckDB combina proprietà di SQLite come compattezza, possibilità di connessione in forma di libreria integrata, archiviazione del database in un unico file e un'interfaccia CLI user-friendly con strumenti e ottimizzazioni per l'esecuzione di query analitiche che coprono una parte significativa dei dati memorizzati, ad esempio eseguendo aggregazioni dell'intero contenuto delle tabelle o unendo più grandi tabelle. Il codice del progetto è scritto in C++ e distribuito sotto la licenza MIT.
La versione 1.0 è evidenziata come il primo rilascio stabile del progetto, durante la preparazione del quale è stata data priorità alla stabilità piuttosto che all'ampliamento delle funzionalità. In questa nuova versione è stata anche confermata la fissazione del formato di archiviazione dei dati, per il quale a partire dal rilascio precedente è garantita la retrocompatibilità. Nei futuri rilasci, gli sviluppatori intendono affrontare con maggior cautela l'aggiunta di nuove funzionalità e prendersi cura della compatibilità tra le versioni, oltre a stabilizzare il dialetto SQL e l'API C. Se in futuro si renderà necessario modificare la semantica SQL, gli sviluppatori pubblicheranno in anticipo un avviso riguardo ai cambiamenti imminenti e forniranno soluzioni alternative per mantenere la funzionalità del codice esistente.
DuckDB supporta un dialetto esteso del linguaggio SQL, che include funzionalità aggiuntive per gestire query molto complesse e di lunga durata. Ad esempio, è possibile utilizzare tipi complessi (array, strutture, unioni), così come eseguire sottoquery correlate arbitrari e nidificati. È support l'esecuzione simultanea di più query e l'esecuzione di query direttamente da file in formato CSV e Parquet. È disponibile il supporto per l'importazione da DBMS PostgreSQL.
Oltre al codice shell di SQLite, il progetto utilizza un parser estratto in una libreria separata da PostgreSQL, il componente Date Math da MonetDB, la propria implementazione delle funzioni di finestra (basata sull'algoritmo Segment Tree Aggregation), un gestore di espressioni regolari basato sulla libreria RE2, il proprio ottimizzatore di query, il meccanismo MVCC per la gestione della concorrenza (Multi-Version Concurrency Control), e anche un motore di esecuzione delle query vettorizzato basato sull'algoritmo Hyper-Pipelining Query Execution, che consente di elaborare grandi insiemi di valori in un'unica operazione.
Fonte: opennet.ru
