DuckDB 0.6.0, variante SQLite per e dumande analitiche publicate

A versione DuckDB 0.6.0 DBMS hè dispunibule, cumminendu tali proprietà SQLite cum'è a compattezza, l'abilità di cunnette in forma di una biblioteca integrata, almacenà a basa di dati in un unicu schedariu è una interfaccia CLI còmuda, cù arnesi è ottimisazioni per eseguisce dumande analitiche. chì copre una parte significativa di e dati almacenati, per esempiu, chì facenu aggregazione di tuttu u cuntenutu di e tavule o unisce parechje tavule grandi. U codice di u prugettu hè distribuitu sottu a licenza MIT. U sviluppu hè sempre in u stadiu di furmà versioni sperimentali, postu chì u formatu di almacenamiento ùn hè ancu stabilizatu è cambia da versione à versione.

DuckDB furnisce un dialettu allargatu di a lingua SQL chì include capacità supplementari per trattà e dumande assai cumplesse è longu. Supporta l'usu di tippi cumplessi (arrays, strutture, unioni) è a capacità di eseguisce sottoquestioni correlate arbitrarie è nidificate. Supporta l'esecuzione simultanea di parechje dumande, l'esecuzione di dumande direttamente da i fugliali in formatu CSV è Parquet. Hè pussibule impurtà da PostgreSQL DBMS.

In più di u codice di shell da SQLite, u prughjettu usa un parser da PostgreSQL, spustatu à una biblioteca separata, u cumpunente di Date Math da MonetDB, a so propria implementazione di e funzioni di finestra (basatu nantu à l'algoritmu di Segment Tree Aggregation), un processatore d'espressione regulare. basatu annantu à a biblioteca RE2, u so propiu ottimisatore di query, u meccanismo di cuntrollu MVCC esecuzione simultanea di i compiti (Multi-Version Concurrency Control), è ancu un mutore di esecuzione di query vectorized basatu annantu à l'algoritmu Hyper-Pipelining Query Execution, chì permette di trasfurmà grandi gruppi di valori in una volta in una operazione.

Trà i cambiamenti in a nova versione:

  • U travagliu cuntinuava à migliurà u formatu di almacenamiento. Un modu di scrittura di discu ottimista hè statu implementatu, in quale quandu un grande settore di dati hè carricu in una transazzione, i dati sò cumpressi è trasmessi à un schedariu da a basa di dati senza aspittà chì a transazzione sia cunfirmata da u cumandimu COMMIT. Duranti l'arrivu di u cumandimu COMMIT, i dati sò digià scritti à u discu, è quandu ROLLBACK hè eseguitu, hè scartatu. Nanzu, i dati sò stati inizialmente guardati interamente in memoria, è quandu sò impegnati, sò stati salvati à u discu.
  • U supportu per a carica parallela di dati in tavule separati hè statu aghjuntu, chì pò aumentà significativamente a velocità di carica in sistemi multi-core. Per esempiu, in a versione precedente, carica una basa di dati cù 150 milioni di fila nantu à una CPU di 10 core hà pigliatu 91 seconde, è in a nova versione, sta operazione dura 17 seconde. Ci hè dui modi di carica parallela - cù a preservazione di l'ordine di i registri è senza a preservazione di l'ordine.
  • Per a cumpressione di dati, l'algoritmu FSST (Fast Static Symbol Table) hè utilizatu, chì vi permette di imballà dati in fila cù un dizziunariu cumuni di partite di tipu. L'applicazione di u novu algoritmu hà permessu di riduce a dimensione di a basa di dati di teste da 761MB à 251MB.
  • Per cumpressà i numeri in virgule flottante (DOUBLE è FLOAT), l'algoritmi Chimp è Patas sò pruposti. Paragunatu à l'algoritmu di Gorillas precedente, Chimp furnisce un livellu più altu di cumpressione è decompressione più veloce. L'algoritmu di Patas hè in ritardu di Chimp in quantu à a cumpressione, ma hè significativamente più veloce in a velocità di descompressione, chì hè quasi uguale à leghje dati senza cumpressione.
  • Aggiunta una capacità sperimentale per carica dati da i fugliali CSV in parechji flussi paralleli (SET experimental_parallel_csv=true), chì riduce significativamente u tempu di carica di grandi file CSV. Per esempiu, quandu l'opzione hè stata attivata, u tempu di scaricamentu per un schedariu CSV di 720 MB hè stata ridutta da 3.5 à 0.6 seconde.
  • A pussibilità di esecuzione parallela di l'operazioni per a creazione è a gestione d'indici hè stata implementata. Per esempiu, l'esekzione di l'operazione CREATE INDEX nantu à una colonna cù 16 million records hè stata ridutta da 5.92 à 1.38 seconde.
  • Parallelizazione di l'operazioni di aggregazione in e dumande chì cuntenenu l'espressione "COUNT (DISTINCT col)" hè furnita.
  • U supportu per u tipu UNION hè statu aghjuntu à SQL, chì permette parechji tipi di esse ligati à u stessu elementu (per esempiu, "UNION (num INT, error VARCHAR))".
  • SQL furnisce l'abilità di generà dumande chì cumincianu cù a parolla "FROM" invece di "SELECT". In questu casu, si assume chì a quistione principia cù "SELECT *".
  • Aghjunghje supportu per l'espressione "COLUMNS" in SQL, chì permette di fà una operazione nantu à parechje colonne senza duplicà l'espressione. Per esempiu, "SELECT MIN (COLUMNS (*)) da obs;" pruvucarà a funzione MIN per esse eseguita per ogni culonna in a tavola obs, è "SELECT COLUMNS('val[0-9]+') from obs;" per i culonni cù un nome custituitu di "val" è numeri.
  • Aghjunghje supportu per l'operazioni di lista, cum'è "SELECT [x + 1 for x in [1, 2, 3]] AS l;".
  • Cunsumu di memoria ottimizatu. Per automaticamente nantu à a piattaforma Linux, a libreria jemalloc hè aduprata per a gestione di memoria. A prestazione significativamente migliorata di l'operazione di fusione di hash quandu a memoria hè limitata.
  • Aggiuntu u modu di output ".mode duckbox" à CLI, scartendu e culonne media basate nantu à e linee di larghezza di a finestra di u terminal). Utilizendu u paràmetru ".maxrows X", pudete ancu limità u numeru di fila di output.
  • A CLI furnisce l'autocumplementu di l'input in cunsiderà u cuntestu (l'input di e parolle chjave, i nomi di e tavule, e funzioni, i nomi di colonna è i nomi di file hè cumpletu).
  • U CLI hè attivatu per difettu per vede un indicatore di prugressu di a dumanda.

Source: opennet.ru

Add a comment