DuckDB 0.6.0, SQLite-variant for analytiske spørringer publisert

Utgivelsen av DuckDB 0.6.0 DBMS er tilgjengelig, og kombinerer slike egenskaper ved SQLite som kompakthet, muligheten til å koble til i form av et innebygd bibliotek, lagring av databasen i én fil og et praktisk CLI-grensesnitt, med verktøy og optimaliseringer for utførelse analytiske spørringer som dekker en betydelig del av de lagrede dataene, for eksempel som samler hele innholdet i tabeller eller slår sammen flere store tabeller. Prosjektkoden er distribuert under MIT-lisensen. Utviklingen er fortsatt på stadiet med å danne eksperimentelle utgivelser, siden lagringsformatet ennå ikke er stabilisert og endres fra versjon til versjon.

DuckDB gir en avansert SQL-dialekt som inkluderer ekstra muligheter for å håndtere svært komplekse og tidkrevende spørringer. Bruken av komplekse typer (matriser, strukturer, fagforeninger) og muligheten til å utføre vilkårlige og nestede korrelerende underspørringer støttes. Den støtter kjøring av flere spørringer samtidig, kjøring av spørringer direkte fra CSV- og Parkett-filer. Det er mulig å importere fra PostgreSQL DBMS.

I tillegg til skallkoden fra SQLite, bruker prosjektet en parser fra PostgreSQL i et eget bibliotek, Date Math-komponenten fra MonetDB, egen implementering av vindusfunksjoner (basert på Segment Tree Aggregation-algoritmen), en regulært uttrykksprosessor basert på RE2-biblioteket, dets egen spørringsoptimalisator og en MVCC-kontrollmekanisme samtidig utførelse av oppgaver (Multi-Version Concurrency Control), samt en vektorisert spørringskjøringsmotor basert på Hyper-Pipelining Query Execution-algoritmen, som tillater store sett med verdier skal behandles på en gang i én operasjon.

Blant endringene i den nye utgivelsen:

  • Arbeidet fortsatte med å forbedre lagringsformatet. En optimistisk diskskrivemodus er implementert, der når du laster et stort sett med data i en transaksjon, blir dataene komprimert og skrevet til en fil fra databasen i strømmemodus, uten å vente på at transaksjonen skal bekreftes med COMMIT-kommandoen . Når en COMMIT-kommando mottas, er dataene allerede skrevet til disken, og når en ROLLBACK utføres, blir de forkastet. Tidligere ble dataene i utgangspunktet fullstendig lagret i minnet, og når de ble forpliktet, ble de lagret på disk.
  • Lagt til støtte for parallell lasting av data i separate tabeller, som lar deg øke lastehastigheten betydelig på flerkjernesystemer. For eksempel, i forrige utgivelse tok det 150 sekunder å laste en database med 10 millioner rader på en 91-kjernes CPU, men i den nye versjonen fullføres denne operasjonen på 17 sekunder. Det er to parallelle lastemoduser - med bevaring av rekkefølgen på poster og uten bevaring av orden.
  • For datakomprimering brukes FSST (Fast Static Symbol Table)-algoritmen, som lar deg pakke data inne i strenger ved å bruke en felles ordbok med typiske treff. Bruken av den nye algoritmen gjorde det mulig å redusere størrelsen på testdatabasen fra 761MB til 251MB.
  • Chimp og Patas-algoritmer har blitt foreslått for å komprimere flytende kommatall (DOUBLE og FLOAT). Sammenlignet med den tidligere brukte Gorillas-algoritmen, gir Chimp høyere nivåer av kompresjon og raskere dekompresjon. Patas-algoritmen henger etter Chimp i komprimeringsforhold, men er mye raskere i dekompresjonshastighet, noe som nesten ikke er forskjellig fra å lese ukomprimerte data.
  • Lagt til en eksperimentell evne til å laste data fra CSV-filer til flere parallelle strømmer (SET experimental_parallel_csv=true), noe som reduserer tiden det tar å laste store CSV-filer betydelig. For eksempel, når dette alternativet var aktivert, ble nedlastingstiden for en 720 MB CSV-fil redusert fra 3.5 til 0.6 sekunder.
  • Muligheten for parallell utførelse av indeksoppretting og forvaltningsoperasjoner er implementert. For eksempel ble CREATE INDEX-operasjonen på en kolonne med 16 millioner poster redusert fra 5.92 til 1.38 sekunder.
  • Aktivert parallellisering av aggregeringsoperasjoner i spørringer som inneholder uttrykket "COUNT(DISTINCT col)".
  • SQL har lagt til støtte for UNION-typen, som gjør at flere typer kan bindes til ett element (for eksempel "UNION(antall INT, feil VARCHAR))").
  • SQL gir muligheten til å lage spørringer som begynner med ordet "FROM" i stedet for "SELECT". I dette tilfellet antas det at spørringen begynner med "SELECT *".
  • SQL har lagt til støtte for COLUMNS-uttrykket, som lar deg utføre en operasjon på flere kolonner uten å duplisere uttrykket. For eksempel "VELG MIN(KOLUMNER(*)) fra obs;" vil føre til at MIN-funksjonen blir utført for hver kolonne i obs-tabellen, og "SELECT COLUMNS('val[0-9]+') from obs;" for kolonner med et navn bestående av "val" og tall.
  • Lagt til støtte for operasjoner på lister, for eksempel "VELG [x + 1 for x i [1, 2, 3]] AS l;".
  • Minneforbruket er optimert. Som standard bruker Linux-plattformen jemalloc-biblioteket for minneadministrasjon. Betydelig forbedret ytelse for hash-sammenslåingsoperasjoner når minnet er begrenset.
  • Lagt til ".mode duckbox"-utgangsmodus til kommandolinjegrensesnittet, som forkaster de midterste kolonnene under hensyntagen til bredden på terminalvinduet (egnet for raskt visuelt å vurdere resultatene av spørringer med et stort antall kolonner, for eksempel "SELECT * FROM tbl", som i normal modus er spredt over flere linjer). Ved å bruke parameteren ".maxrows X" kan du i tillegg begrense antall rader som vises.
  • CLI gir autofullføring av input som tar hensyn til konteksten (inntasting av nøkkelord, tabellnavn, funksjoner, kolonnenavn og filnavn er fullført).
  • CLI har en søkefremdriftsindikator aktivert som standard.

Kilde: opennet.ru

Legg til en kommentar