DuckDB 0.6.0, SQLite-variant för analytiska frågor publicerade

DuckDB 0.6.0 DBMS-versionen är tillgänglig, som kombinerar sådana SQLite-egenskaper som kompakthet, möjligheten att ansluta i form av ett inbäddat bibliotek, lagring av databasen i en enda fil och ett bekvämt CLI-gränssnitt, med verktyg och optimeringar för att utföra analytiska frågor täcker en betydande del av lagrad data, till exempel, som utför aggregering av hela innehållet i tabeller eller slår samman flera stora tabeller. Projektkoden distribueras under MIT-licensen. Utvecklingen är fortfarande på det stadium att skapa experimentella utgåvor, eftersom förvarsformatet ännu inte är stabiliserat och ändras från version till version.

DuckDB tillhandahåller en utökad dialekt av SQL-språket som inkluderar ytterligare funktioner för att hantera mycket komplexa och långvariga frågor. Den stöder användningen av komplexa typer (matriser, strukturer, fackföreningar) och förmågan att exekvera godtyckliga och kapslade korrelerade underfrågor. Stöder samtidig exekvering av flera frågor, exekvering av frågor direkt från filer i CSV- och Parkettformat. Det är möjligt att importera från PostgreSQL DBMS.

Förutom skalkoden från SQLite använder projektet en parser från PostgreSQL, flyttad till ett separat bibliotek, Date Math-komponenten från MonetDB, dess egen implementering av fönsterfunktioner (baserat på Segment Tree Aggregation-algoritmen), en processor för reguljära uttryck. baserat på RE2-biblioteket, dess egen frågeoptimerare, MVCC-kontrollmekanism simultan exekvering av uppgifter (Multi-Version Concurrency Control), samt en vektoriserad frågekörningsmotor baserad på Hyper-Pipelining Query Execution-algoritmen, som tillåter bearbetning av stora uppsättningar av värden på en gång i en operation.

Bland ändringarna i den nya utgåvan:

  • Arbetet fortsatte med att förbättra lagringsformatet. Ett optimistiskt diskskrivningsläge har implementerats, där, när en stor datamängd laddas i en transaktion, data komprimeras och skrivs i strömmande läge till en fil från databasen utan att vänta på att transaktionsbekräftelsen är klar med kommandot COMMIT . Under ankomsten av COMMIT-kommandot skrivs data redan till disken, och när ROLLBACK exekveras, kasseras den. Tidigare lagrades data från början helt i minnet, och när de begicks, sparades de på disk.
  • Stöd för parallell laddning av data i separata tabeller har lagts till, vilket avsevärt kan öka laddningshastigheten på flerkärniga system. Till exempel, i den tidigare utgåvan, tog det 150 sekunder att ladda en databas med 10 miljoner rader på en 91-kärnig CPU, och i den nya versionen tar denna operation 17 sekunder. Det finns två lägen för parallell laddning - med bevarande av ordningen på posterna och utan bevarande av ordningen.
  • För datakomprimering används algoritmen FSST (Fast Static Symbol Table), som låter dig packa data inuti rader med hjälp av en vanlig ordbok med typmatchningar. Tillämpningen av den nya algoritmen gjorde det möjligt att minska storleken på testdatabasen från 761MB till 251MB.
  • För att komprimera flyttal (DOUBLE och FLOAT) föreslås Chimp och Patas algoritmer. Jämfört med den tidigare Gorillas-algoritmen ger Chimp en högre nivå av komprimering och snabbare dekompression. Patas-algoritmen släpar efter Chimp vad gäller komprimering, men är betydligt snabbare i dekompressionshastighet, vilket är nästan samma sak som att läsa okomprimerad data.
  • En experimentell förmåga att ladda data från CSV-filer till flera parallella strömmar har lagts till (SET experimental_parallel_csv=true), vilket avsevärt minskar laddningstiden för stora CSV-filer. Till exempel, när alternativet var aktiverat, minskade nedladdningstiden för en 720 MB CSV-fil från 3.5 till 0.6 sekunder.
  • Möjligheten till parallellkörning av operationer för att skapa och hantera index har implementerats. Till exempel reducerades exekveringen av CREATE INDEX-operationen på en kolumn med 16 miljoner poster från 5.92 till 1.38 sekunder.
  • Parallellisering av aggregeringsoperationer i frågor som innehåller uttrycket "COUNT(DISTINCT col)" tillhandahålls.
  • Stöd för UNION-typen har lagts till i SQL, vilket gör att flera typer kan bindas till samma element (till exempel "UNION(num INT, fel VARCHAR))".
  • SQL ger möjlighet att generera frågor som börjar med ordet "FRÅN" istället för "VÄLJ". I det här fallet antas det att frågan börjar med "SELECT *".
  • Lade till stöd för uttrycket "COLUMNS" i SQL, så att du kan utföra en operation på flera kolumner utan att duplicera uttrycket. Till exempel, "SELECT MIN(COLUMNS(*)) from obs;" kommer att göra att MIN-funktionen exekveras för varje kolumn i obs-tabellen, och "SELECT COLUMNS('val[0-9]+') from obs;" för kolumner med ett namn bestående av "val" och siffror.
  • Lade till stöd för listoperationer, som "VÄLJ [x + 1 för x i [1, 2, 3]] AS l;".
  • Optimerad minnesförbrukning. Som standard på Linux-plattformen används jemalloc-biblioteket för minneshantering. Avsevärt förbättrad prestanda för hash-sammanfogningsoperationer när minnet är begränsat.
  • Lade till ".mode duckbox"-utgångsläge till CLI, och kasserade mellankolumner baserade på terminalfönsterbreddslinjer). Med parametern ".maxrows X" kan du dessutom begränsa antalet utmatningsrader.
  • CLI tillhandahåller automatisk inmatning med hänsyn till sammanhanget (inmatningen av nyckelord, tabellnamn, funktioner, kolumnnamn och filnamn är klar).
  • CLI är aktiverat som standard för att visa en frågeförloppsindikator.

Källa: opennet.ru

Lägg en kommentar