Dopo sei anni di sviluppo, è stata rilasciata la versione 1.0 del DBMS DuckDB, presentato come l'alternativa a SQLite per le query analitiche. DuckDB combina le caratteristiche di SQLite, come compattezza, connettività come libreria incorporata, archiviazione del database in un singolo file e un'interfaccia CLI user-friendly, con strumenti e ottimizzazioni per eseguire query analitiche che coprono una parte significativa dei dati memorizzati, ad esempio aggregando il contenuto di intere tabelle o unendo più grandi tabelle. Il codice del progetto è scritto in C++ e distribuito con licenza MIT.
La versione 1.0 è segnata come il primo rilascio stabile del progetto, nel quale è stato dato maggior peso alla stabilità piuttosto che all'espansione delle funzionalità. In questa nuova versione è stata inoltre stabilizzata la formattazione del formato di archiviazione dei dati, per il quale a partire dal rilascio precedente è garantita la compatibilità retroattiva. Nei futuri rilasci, gli sviluppatori prevedono di prestare maggiore attenzione all'aggiunta di nuove funzionalità e di mantenere la compatibilità tra le versioni, così come la stabilizzazione del dialetto SQL e dell'API C. Qualora in futuro fossero necessari cambiamenti nella semantica SQL, gli sviluppatori pubblicheranno in anticipo un avviso sui cambiamenti imminenti e forniranno soluzioni alternative per mantenere la funzionalità del codice esistente.
DuckDB supporta un dialetto SQL avanzato, che include funzionalità aggiuntive per gestire query molto complesse e a lungo termine. È possibile, ad esempio, utilizzare tipi complessi (array, strutture, unioni), oltre a eseguire sottoquery correlate arbitrariamente e annidate. È support l'esecuzione simultanea di più query, l'esecuzione di query direttamente da file in formato CSV e Parquet. È disponibile anche il supporto per l'importazione da DBMS PostgreSQL.
Oltre al codice shell di SQLite, il progetto utilizza un parser estratto in una libreria a parte di PostgreSQL, il componente Date Math di MonetDB, una propria implementazione delle funzioni di finestra (basata sull'algoritmo Segment Tree Aggregation), un gestore di espressioni regolari basato sulla libreria RE2, un ottimizzatore di query proprietario, un meccanismo MVCC per la gestione della concorrenza nelle operazioni (Multi-Version Concurrency Control) e 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
