È stato pubblicato il rilascio del DBMS DuckDB 1.4.0, orientato all'esecuzione di query analitiche e concettualmente simile a SQLite. DuckDB combina proprietà di SQLite come compattezza, integrazione come libreria embedded, archiviazione del database in un singolo file e interfaccia CLI, con funzionalità e ottimizzazioni per l'esecuzione di query analitiche che coprono una parte significativa dei dati memorizzati, ad esempio, eseguendo aggregazioni su tutto il contenuto delle tabelle o unendo più tabelle di grandi dimensioni. Il codice del progetto è scritto in C++ e distribuito con licenza MIT.
DuckDB offre un dialetto SQL esteso, inclusi ulteriori funzionalità per gestire query molto complesse e a lungo termine. È possibile utilizzare tipi complessi (array, strutture, unioni), oltre a eseguire sottoquery correlate arbitrari e nidificati. Viene supportata l'esecuzione simultanea di più query, con la possibilità di eseguire query direttamente da file nei formati CSV e Parquet. È disponibile il supporto per l'importazione da DBMS PostgreSQL.
Il progetto utilizza un'interfaccia di SQLite, un parser 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 personalizzato, un meccanismo MVCC per la gestione della concorrenza (Multi-Version Concurrency Control), oltre a un motore di esecuzione delle query vettorializzato basato sull'algoritmo Hyper-Pipelining Query Execution, che consente di elaborare grandi set di valori in un'unica operazione.
Nella nuova versione:
- È stata aggiunta la supporto per l'archiviazione dei file del database in forma crittografata. Per la crittografia viene utilizzato l'algoritmo AES-256 in modalità GCM. Viene crittografato non solo il file principale con i dati, ma anche i log WAL e i file temporanei. Le chiavi per la crittografia del database vengono specificate con il comando ATTACH tramite il parametro ENCRYPTION_KEY. ATTACH 'encrypted.db' AS enc_db (ENCRYPTION_KEY 'quack_quack');
- È stata aggiunta la supporto al comando "MERGE INTO", che può essere utilizzato come alternativa all'espressione "INSERT ... ON CONFLICT", non richiedendo una chiave primaria e funzionando con condizioni di unione arbitraria. Il comando "MERGE INTO" consente di creare espressioni SQL condizionali che combinano in un'unica espressione operazioni di INSERT, UPDATE e DELETE. Ad esempio, tramite MERGE è possibile organizzare l'unione di due tabelle, inserendo record mancanti e aggiornando quelli esistenti. WITH deletes(item_id, delete_threshold) AS (VALUES (10, 3000)) MERGE INTO Stock USING deletes USING (item_id) WHEN MATCHED AND balance < delete_threshold THEN DELETE RETURNING merge_action, *;
- In aggiunta, è stata aggiunta la supporto per l'operatività con tabelle in formato Apache Iceberg, consentendo operazioni di scrittura (in precedenza era supportata solo la lettura), permettendo di trasferire dati da Iceberg a DuckDB e viceversa.
- Nella client command line è stato aggiunto un indicatore di progresso per l'esecuzione dell'operazione con previsione del tempo rimanente fino al completamento.
- È stata aggiunta la funzione finestra "FILL", che può essere utilizzata per l'interpolazione dei valori mancanti in finestre ordinate. FROM (VALUES (1, 1), (2, NULL), (3, 42)) t(c1, c2) SELECT fill(c2) OVER (ORDER BY c1) f; 1 21 42
- È stato implementato il componente aggiuntivo Teradata Connector per la connessione ai database Teradata. Il componente aggiuntivo consente di manipolare tabelle, eseguire query e lanciare comandi SQL direttamente in Teradata, utilizzando DuckDB.
- È stata aggiunta la supporto per il salvataggio dello stato (checkpoint) delle tabelle memorizzate in memoria, il che ha consentito di implementare il supporto per la compressione. Inoltre, durante il salvataggio dello stato viene eseguita la pulizia delle righe eliminate e il rilascio di spazio dopo le operazioni di eliminazione. ATTACH ':memory:' AS memory_compressed (COMPRESS);
- Sono state proposte diverse ottimizzazioni delle prestazioni: L'implementazione della ordinamento è stata trasferita all'uso dell'algoritmo di fusione multi-vie (k-way merge sort), che riduce il movimento dei dati. Le espressioni tabellari comuni (Common Table Expression, CTE) ora vengono materializzate per impostazione predefinita.
Fonte: opennet.ru
