DuckDB 0.6.0, variant SQLite per a consultes analítiques publicades

El llançament del SGBD DuckDB 0.6.0 està disponible, que combina propietats de SQLite com la compacitat, la capacitat de connectar-se en forma de biblioteca incrustada, emmagatzemar la base de dades en un fitxer i una interfície CLI convenient, amb eines i optimitzacions per a l'execució. consultes analítiques que cobreixen una part important de les dades emmagatzemades, per exemple que agrupen tot el contingut de taules o fusionen diverses taules grans. El codi del projecte es distribueix sota la llicència MIT. El desenvolupament encara es troba en l'etapa de formació de versions experimentals, ja que el format d'emmagatzematge encara no s'ha estabilitzat i canvia de versió en versió.

DuckDB proporciona un dialecte SQL avançat que inclou capacitats addicionals per gestionar consultes molt complexes i que consumeixen molt de temps. S'admet l'ús de tipus complexos (matrius, estructures, unions) i la capacitat d'executar subconsultes de correlació arbitràries i imbricades. Admet executar diverses consultes simultàniament, executant consultes directament des de fitxers CSV i Parquet. És possible importar des del SGBD PostgreSQL.

A més del codi shell de SQLite, el projecte utilitza un analitzador de PostgreSQL en una biblioteca separada, el component Date Math de MonetDB, la seva pròpia implementació de funcions de finestra (basada en l'algorisme d'agregació d'arbres de segments), un processador d'expressions regulars basat en la biblioteca RE2, el seu propi optimitzador de consultes i un mecanisme de control MVCC per a l'execució simultània de tasques (Control de concurrència multiversió), així com un motor d'execució de consultes vectoritzat basat en l'algorisme d'execució de consultes Hyper-Pipelining, que permet grans conjunts de valors per processar-se alhora en una operació.

Entre els canvis a la nova versió:

  • Es va continuar treballant per millorar el format d'emmagatzematge. S'ha implementat un mode d'escriptura de disc optimista, en què quan es carreguen un gran conjunt de dades en una transacció, les dades es comprimeixen i s'escriuen en un fitxer de la base de dades en mode streaming, sense esperar que la transacció es confirmi amb l'ordre COMMIT. . Quan es rep una ordre COMMIT, les dades ja estan escrites al disc, i quan s'executa un ROLLBACK, es descarta. Anteriorment, inicialment, les dades es desaven completament a la memòria i, quan es comprometien, es desaven al disc.
  • S'ha afegit suport per a la càrrega paral·lela de dades en taules separades, que us permet augmentar significativament la velocitat de càrrega en sistemes multinúclis. Per exemple, a la versió anterior, carregar una base de dades amb 150 milions de files en una CPU de 10 nuclis va trigar 91 segons, però en la nova versió aquesta operació es completa en 17 segons. Hi ha dos modes de càrrega paral·lel: amb preservació de l'ordre dels registres i sense preservació de l'ordre.
  • Per a la compressió de dades, s'utilitza l'algorisme FSST (Fast Static Symbol Table), que us permet empaquetar dades dins de cadenes utilitzant un diccionari comú de coincidències típiques. L'ús del nou algorisme va permetre reduir la mida de la base de dades de prova de 761 MB a 251 MB.
  • S'han proposat algorismes de Chimp i Patas per comprimir nombres de coma flotant (DOUBLE i FLOAT). En comparació amb l'algorisme de Goril·les anterior, Chimp proporciona nivells més alts de compressió i descompressió més ràpida. L'algoritme de Patas es queda endarrerit respecte a Chimp en relació de compressió, però és molt més ràpid en velocitat de descompressió, que gairebé no és diferent de la lectura de dades sense comprimir.
  • S'ha afegit una capacitat experimental per carregar dades dels fitxers CSV a diversos fluxos paral·lels (SET experimental_parallel_csv=true), que redueix significativament el temps que triga a carregar fitxers CSV grans. Per exemple, quan aquesta opció estava activada, el temps de descàrrega d'un fitxer CSV de 720 MB es va reduir de 3.5 a 0.6 segons.
  • S'ha implementat la possibilitat d'execució paral·lela d'operacions de creació i gestió d'índexs. Per exemple, l'operació CREATE INDEX en una columna amb 16 milions de registres es va reduir de 5.92 a 1.38 segons.
  • S'ha activat la paral·lelització d'operacions d'agregació en consultes que contenen l'expressió "COUNT(DISTINCT col)".
  • SQL ha afegit suport per al tipus UNION, que permet lligar diversos tipus a un element (per exemple, "UNION(num INT, error VARCHAR))").
  • SQL ofereix la possibilitat de formar consultes que comencen amb la paraula "FROM" en lloc de "SELECT". En aquest cas, s'assumeix que la consulta comença amb "SELECT *".
  • SQL ha afegit suport per a l'expressió COLUMNS, que us permet realitzar una operació en diverses columnes sense duplicar l'expressió. Per exemple, "SELECT MIN(COLUMNS(*)) from obs;" farà que la funció MIN s'executi per a cada columna de la taula obs i "SELECT COLUMNS('val[0-9]+') from obs;" per a columnes amb un nom format per "val" i números.
  • S'ha afegit suport per a operacions a llistes, per exemple, "SELECT [x + 1 per a x a [1, 2, 3]] AS l;".
  • S'ha optimitzat el consum de memòria. Per defecte, la plataforma Linux utilitza la biblioteca jemalloc per a la gestió de la memòria. Rendiment millorat significativament de les operacions de fusió de hash quan la memòria és limitada.
  • S'ha afegit el mode de sortida ".mode duckbox" a la interfície de la línia d'ordres, que descarta les columnes del mig tenint en compte l'amplada de la finestra del terminal (adequat per avaluar visualment ràpidament els resultats de consultes amb un gran nombre de columnes, com ara "SELECT * FROM tbl”, que en mode normal es reparteixen en diverses línies). Amb el paràmetre ".maxrows X", també podeu limitar el nombre de files que es mostren.
  • La CLI proporciona l'autocompleció de l'entrada tenint en compte el context (s'ha completat l'entrada de paraules clau, noms de taules, funcions, noms de columnes i noms de fitxers).
  • La CLI té un indicador de progrés de la consulta activat de manera predeterminada.

Font: opennet.ru

Afegeix comentari