UtgÄvan av databasen DuckDB 0.6.0 Àr tillgÀnglig, vilket kombinerar funktioner frÄn SQLite, sÄsom kompakt storlek, möjlighet att ansluta i form av ett inbÀddat bibliotek, lagring av databasen i en fil och ett anvÀndarvÀnligt CLI-grÀnssnitt, med verktyg och optimeringar för att utföra analytiska frÄgor som tÀcker en stor del av de lagrade uppgifterna, till exempel som utför aggregat av hela innehÄllet i tabeller eller slÄr samman flera stora tabeller. Projektkoden distribueras under MIT-licensen. Utvecklingen Àr fortfarande i ett experimentellt stadium, dÄ formatet för lagring fortfarande inte Àr stabilt och Àndras frÄn version till version.
DuckDB erbjuder en utökad SQL-dialekt, som inkluderar ytterligare funktioner för att hantera mycket komplexa och tidskrÀvande frÄgor. AnvÀndning av komplexa typer (array, strukturer, unioner) och möjligheten att utföra godtyckliga och inbÀddade korrelerade undermappar stöds. Samtidig körning av flera frÄgor stöds, liksom att köra frÄgor direkt frÄn filer i formatet CSV och Parquet. Det finns möjlighet att importera frÄn databaserna PostgreSQL.
Förutom skalprogrammet frÄn SQLite anvÀnds en parser frÄn PostgreSQL som har flyttats till ett eget bibliotek, komponenten Date Math frÄn MonetDB, en egen implementering av fönsterfunktioner (baserat pÄ algoritmen Segment Tree Aggregation), en regeluttrycksbehandlare baserad pÄ biblioteket RE2, egna frÄgeoptimerare, MVCC-mekanismen för hantering av samtidig uppgiftsutförande (Multi-Version Concurrency Control), samt en vektoriserad frÄgaexecutionsmotor baserad pÄ algoritmen Hyper-Pipelining Query Execution, som möjliggör bearbetning av stora datamÀngder i en enda operation.
Bland förÀndringarna i den nya versionen:
- Arbetet med att förbÀttra lagringsformatet har fortsatt. En optimistisk disk-skrivningslÀge har implementerats, dÀr stora datamÀngder laddas in i en transaktion och komprimeras och strömmas till databasen utan att vÀnta pÄ att transaktionen med kommandot COMMIT ska avslutas. Vid kommandot COMMIT Àr uppgifterna redan skrivna pÄ disken, och vid utförande av ROLLBACK kasseras de. Tidigare sparades data först helt i minnet och skrevs dÀrefter till disken vid commit.
- Stöd för parallell datainlĂ€sning till separata tabeller har lagts till, vilket avsevĂ€rt ökar hastigheten pĂ„ inlĂ€sningen pĂ„ flerprocessorsystem. I den tidigare versionen tog det 91 sekunder att ladda en databas med 150 miljoner rader pĂ„ en 10-kĂ€rnig CPU, medan denna operation i den nya versionen genomförs pĂ„ 17 sekunder. Det finns tvĂ„ lĂ€gen för parallell inlĂ€sning â med bevarande av ordningen pĂ„ poster och utan bevarande av ordningen.
- För datascompression anvÀnds algoritmen FSST (Fast Static Symbol Table), som möjliggör att data i strÀngar packas med en gemensam ordbok av typmatchningar. AnvÀndningen av den nya algoritmen har minskat storleken pÄ testdatabasen frÄn 761 MB till 251 MB.
- För kompression av flyttal (DOUBLE och FLOAT) föreslÄs algoritmerna Chimp och Patas. JÀmfört med den tidigare anvÀnda algoritmen Gorillas erbjuder Chimp en högre kompressionsgrad och snabbare uppackning. Algoritmen Patas har en lÀgre kompressionsgrad Àn Chimp men Àr betydligt snabbare vid uppackning, nÀstan pÄ nivÄ med att lÀsa ocompressad data.
- En experimentell möjlighet att ladda data frÄn CSV-filer i flera parallella strömmar har lagts till (SET experimental_parallel_csv=true), vilket avsevÀrt minskar tiden för att ladda stora CSV-filer. Till exempel, nÀr alternativet Àr aktiverat har tiden för att ladda en CSV-fil som Àr 720 MB minskat frÄn 3,5 till 0,6 sekunder.
- Funktionen för parallell exekvering av skapande och hantering av index har implementerats. Till exempel har exekveringstiden för operationen CREATE INDEX för en kolumn med 16 miljoner poster minskat frÄn 5,92 till 1,38 sekunder.
- Parallellisering av aggregeringsoperationer i frÄgor som innehÄller uttrycket "COUNT(DISTINCT col)" har sÀkerstÀllts.
- Stödet för UNION-typen har lagts till i SQL, vilket tillÄter bindning av flera typer till ett enda element (till exempel "UNION(num INT, error VARCHAR))").
- I SQL har möjligheten att bilda frÄgor som börjar med ordet "FROM" istÀllet för "SELECT" tillhandahÄllits. I detta fall förstÄs det att frÄgan börjar med "SELECT *".
- I SQL har stöd för uttrycket "COLUMNS" lagts till, vilket möjliggör att utföra operationer över flera kolumner utan att duplicera uttrycket. Till exempel, "SELECT MIN(COLUMNS(*)) from obs;" kommer att utföra MIN-funktionen för varje kolumn i tabellen obs, och "SELECT COLUMNS(âval[0-9]+â) from obs;" för kolumner med namn bestĂ„ende av "val" och siffror.
- Stöd för operationer pÄ listor har lagts till, till exempel "SELECT [x + 1 for x in [1, 2, 3]] AS l;".
- Optimering av minnesanvÀndning har genomförts. Som standard anvÀnds jemalloc-biblioteket för minneshantering pÄ Linux-plattformen. Prestandan för hash-sammanslagningsoperationer har förbÀttrats avsevÀrt vid begrÀnsad minnesstorlek.
- I kommandoraden har lÀget för utdata «.mode duckbox» lagts till, vilket tar bort medelkolumner med hÀnsyn till terminalfönstrets bredd (lÀmpligt för en snabb och visuell bedömning av resultat av förfrÄgningar med ett stort antal kolumner, sÄsom «SELECT * FROM tbl», som i normalt lÀge sprider sig över flera rader). Med parametern «.maxrows X» kan man ocksÄ begrÀnsa antalet utdata-rader.
- I CLI har autocompletion av inmatning med hÀnsyn till kontext sÀkerstÀllts (kompletterar inmatningen av nyckelord, tabellnamn, funktioner, kolumnnamn och filnamn).
- I CLI har visning av en progressindikator för frÄgeutförande aktiverats som standard.
KĂ€lla: opennet.ru
