DuckDB 0.6.0, SQLite-variant til analytiske forespørgsler offentliggjort

Udgivelsen af ​​DuckDB 0.6.0 DBMS er tilgængelig, der kombinerer sådanne egenskaber ved SQLite som kompakthed, evnen til at oprette forbindelse i form af et indlejret bibliotek, lagring af databasen i én fil og en praktisk CLI-grænseflade med værktøjer og optimeringer til udførelse analytiske forespørgsler, der dækker en væsentlig del af de lagrede data, f.eks. som samler hele indholdet af tabeller eller fusionerer flere store tabeller. Projektkoden distribueres under MIT-licensen. Udviklingen er stadig på stadiet med at danne eksperimentelle udgivelser, da lagerformatet endnu ikke er stabiliseret og skifter fra version til version.

DuckDB leverer en avanceret SQL-dialekt, der inkluderer yderligere muligheder for at håndtere meget komplekse og tidskrævende forespørgsler. Brugen af ​​komplekse typer (arrays, strukturer, fagforeninger) og evnen til at udføre vilkårlige og indlejrede korrelerende underforespørgsler understøttes. Det understøtter at køre flere forespørgsler samtidigt, køre forespørgsler direkte fra CSV- og Parket-filer. Det er muligt at importere fra PostgreSQL DBMS.

Udover shell-koden fra SQLite bruger projektet en parser fra PostgreSQL i et separat bibliotek, Date Math-komponenten fra MonetDB, sin egen implementering af vinduesfunktioner (baseret på Segment Tree Aggregation-algoritmen), en regulært udtryksprocessor baseret på RE2-biblioteket, dets egen forespørgselsoptimering og en MVCC-kontrolmekanisme samtidig udførelse af opgaver (Multi-Version Concurrency Control), samt en vektoriseret forespørgselsudførelsesmotor baseret på Hyper-Pipelining Query Execution-algoritmen, som tillader store sæt værdier skal behandles på én gang i én operation.

Blandt ændringerne i den nye udgivelse:

  • Arbejdet fortsatte med at forbedre lagringsformatet. Der er implementeret en optimistisk diskskrivningstilstand, hvor ved indlæsning af et stort sæt data i én transaktion, komprimeres dataene og skrives til en fil fra databasen i streamingtilstand, uden at vente på, at transaktionen bekræftes med kommandoen COMMIT . Når en COMMIT-kommando modtages, er dataene allerede skrevet til disken, og når en ROLLBACK udføres, kasseres de. Tidligere blev dataene oprindeligt fuldstændigt gemt i hukommelsen, og når de blev begået, blev de gemt på disken.
  • Tilføjet understøttelse af parallel indlæsning af data i separate tabeller, hvilket giver dig mulighed for at øge indlæsningshastigheden markant på multi-core systemer. For eksempel, i den tidligere udgivelse, tog det 150 sekunder at indlæse en database med 10 millioner rækker på en 91-core CPU, men i den nye version er denne operation fuldført på 17 sekunder. Der er to parallelle indlæsningstilstande - med bevarelse af rækkefølgen af ​​poster og uden bevarelse af orden.
  • Til datakomprimering bruges FSST (Fast Static Symbol Table) algoritmen, som giver dig mulighed for at pakke data inde i strenge ved hjælp af en fælles ordbog over typiske matches. Brugen af ​​den nye algoritme gjorde det muligt at reducere størrelsen af ​​testdatabasen fra 761MB til 251MB.
  • Chimpanse og Patas algoritmer er blevet foreslået til at komprimere flydende kommatal (DOUBLE og FLOAT). Sammenlignet med den tidligere Gorillas-algoritme giver Chimp højere niveauer af kompression og hurtigere dekompression. Patas-algoritmen halter bagefter Chimp i kompressionsforhold, men er meget hurtigere i dekompressionshastighed, hvilket næsten ikke er anderledes end at læse ukomprimerede data.
  • Tilføjet en eksperimentel mulighed for at indlæse data fra CSV-filer til flere parallelle strømme (SET experimental_parallel_csv=true), hvilket reducerer den tid, det tager at indlæse store CSV-filer markant. For eksempel, når denne indstilling var aktiveret, blev downloadtiden for en 720 MB CSV-fil reduceret fra 3.5 til 0.6 sekunder.
  • Muligheden for parallel eksekvering af indeksoprettelse og forvaltningsoperationer er implementeret. For eksempel blev CREATE INDEX-operationen på en kolonne med 16 millioner poster reduceret fra 5.92 til 1.38 sekunder.
  • Aktiveret parallelisering af aggregeringsoperationer i forespørgsler, der indeholder udtrykket "COUNT(DISTINCT col)".
  • SQL har tilføjet understøttelse af UNION-typen, som gør det muligt at binde flere typer til ét element (f.eks. "UNION(antal INT, fejl VARCHAR))").
  • SQL giver mulighed for at danne forespørgsler, der begynder med ordet "FRA" i stedet for "VÆLG". I dette tilfælde antages det, at forespørgslen begynder med "SELECT *".
  • SQL har tilføjet understøttelse af COLUMNS-udtrykket, som giver dig mulighed for at udføre en handling på flere kolonner uden at duplikere udtrykket. For eksempel "SELECT MIN(COLUMNS(*)) from obs;" vil få MIN-funktionen til at blive udført for hver kolonne i obs-tabellen, og "SELECT COLUMNS('val[0-9]+') from obs;" for kolonner med et navn bestående af "val" og tal.
  • Tilføjet understøttelse af operationer på lister, for eksempel "VÆLG [x + 1 for x i [1, 2, 3]] AS l;".
  • Hukommelsesforbruget er blevet optimeret. Som standard bruger Linux-platformen jemalloc-biblioteket til hukommelsesstyring. Væsentlig forbedret ydeevne af hash-fusionsoperationer, når hukommelsen er begrænset.
  • Tilføjet ".mode duckbox"-outputtilstand til kommandolinjegrænsefladen, som kasserer de midterste kolonner under hensyntagen til bredden af ​​terminalvinduet (velegnet til hurtig visuel vurdering af resultaterne af forespørgsler med et stort antal kolonner, såsom "SELECT * FROM tbl”, som i normal tilstand er spredt over flere linjer). Ved at bruge parameteren ".maxrows X" kan du yderligere begrænse antallet af viste rækker.
  • CLI'en giver autofuldførelse af input under hensyntagen til konteksten (input af nøgleord, tabelnavne, funktioner, kolonnenavne og filnavne er afsluttet).
  • CLI'en har en forespørgselsstatusindikator aktiveret som standard.

Kilde: opennet.ru

Tilføj en kommentar