Zverejnená verzia DuckDB 0.6.0, SQLite variant pre analytické dotazy

K dispozícii je vydanie DuckDB 0.6.0 DBMS, ktoré kombinuje také vlastnosti SQLite, ako je kompaktnosť, možnosť pripojenia vo forme vstavanej knižnice, ukladanie databázy do jedného súboru a pohodlné rozhranie CLI s nástrojmi a optimalizáciami na vykonávanie analytické dotazy pokrývajúce významnú časť uložených údajov, napríklad agregujú celý obsah tabuliek alebo spájajú niekoľko veľkých tabuliek. Kód projektu je distribuovaný pod licenciou MIT. Vývoj je stále v štádiu formovania experimentálnych vydaní, keďže formát úložiska ešte nie je stabilizovaný a mení sa z verzie na verziu.

DuckDB poskytuje pokročilý SQL dialekt, ktorý obsahuje ďalšie možnosti na spracovanie veľmi zložitých a časovo náročných dopytov. Podporuje sa použitie komplexných typov (polia, štruktúry, zväzky) a schopnosť vykonávať ľubovoľné a vnorené korelujúce poddotazy. Podporuje spustenie viacerých dotazov súčasne, spúšťanie dotazov priamo zo súborov CSV a Parquet. Je možné importovať z PostgreSQL DBMS.

Okrem shell kódu z SQLite projekt využíva parser z PostgreSQL v samostatnej knižnici, komponent Date Math z MonetDB, vlastnú implementáciu funkcií okna (založený na algoritme Segment Tree Aggregation), procesor regulárnych výrazov založený na knižnica RE2, vlastný optimalizátor dotazov a riadiaci mechanizmus MVCC simultánne vykonávanie úloh (Multi-Version Concurrency Control), ako aj vektorizovaný nástroj na vykonávanie dotazov založený na algoritme Hyper-Pipelining Query Execution, ktorý umožňuje veľké množiny hodnôt spracovať naraz v jednej operácii.

Medzi zmeny v novom vydaní:

  • Pokračovali práce na zlepšení formátu úložiska. Bol implementovaný optimistický režim zápisu na disk, v ktorom sa pri načítaní veľkého súboru údajov v jednej transakcii údaje skomprimujú a zapíšu do súboru z databázy v režime streamovania bez čakania na potvrdenie transakcie príkazom COMMIT. . Keď sa prijme príkaz COMMIT, údaje sú už zapísané na disk a keď sa vykoná ROLLBACK, zahodí sa. Predtým sa údaje pôvodne úplne uložili do pamäte a po potvrdení sa uložili na disk.
  • Pridaná podpora pre paralelné načítanie údajov do samostatných tabuliek, čo umožňuje výrazne zvýšiť rýchlosť načítania na viacjadrových systémoch. Napríklad v predchádzajúcom vydaní načítanie databázy so 150 miliónmi riadkov na 10-jadrový procesor trvalo 91 sekúnd, no v novej verzii je táto operácia dokončená za 17 sekúnd. Existujú dva režimy paralelného načítania – so zachovaním poradia záznamov a bez zachovania poradia.
  • Na kompresiu údajov sa používa algoritmus FSST (Fast Static Symbol Table), ktorý vám umožňuje zabaliť údaje do reťazcov pomocou bežného slovníka typických zhôd. Použitie nového algoritmu umožnilo znížiť veľkosť testovacej databázy zo 761 MB na 251 MB.
  • Na kompresiu čísel s pohyblivou rádovou čiarkou (DOUBLE a FLOAT) boli navrhnuté algoritmy Chimp a Patas. V porovnaní s predchádzajúcim algoritmom Gorillas poskytuje Chimp vyššiu úroveň kompresie a rýchlejšiu dekompresiu. Algoritmus Patas zaostáva za Chimpom v kompresnom pomere, ale je oveľa rýchlejší v rýchlosti dekompresie, ktorá sa takmer nelíši od čítania nekomprimovaných údajov.
  • Pridaná experimentálna možnosť načítania údajov zo súborov CSV do viacerých paralelných streamov (SET experimental_parallel_csv=true), čo výrazne skracuje čas potrebný na načítanie veľkých súborov CSV. Napríklad, keď bola táto možnosť povolená, čas sťahovania súboru CSV s veľkosťou 720 MB sa skrátil z 3.5 na 0.6 sekundy.
  • Bola implementovaná možnosť paralelného vykonávania operácií vytvárania a správy indexov. Napríklad operácia CREATE INDEX na stĺpci so 16 miliónmi záznamov bola znížená z 5.92 na 1.38 sekundy.
  • Povolená paralelizácia agregačných operácií v dotazoch obsahujúcich výraz „COUNT(DISTINCT col)“.
  • SQL pridal podporu pre typ UNION, ktorý umožňuje naviazať viacero typov na jeden prvok (napríklad “UNION(číslo INT, chyba VARCHAR))”).
  • SQL poskytuje možnosť vytvárať dotazy, ktoré začínajú slovom „FROM“ namiesto „SELECT“. V tomto prípade sa predpokladá, že dotaz začína "SELECT *".
  • SQL pridal podporu pre výraz COLUMNS, ktorý vám umožňuje vykonať operáciu na viacerých stĺpcoch bez duplikovania výrazu. Napríklad „VYBRAŤ MIN(STĹPCE(*)) z obs;“ spôsobí vykonanie funkcie MIN pre každý stĺpec v tabuľke obs a "SELECT COLUMNS('val[0-9]+') from obs;" pre stĺpce s názvom pozostávajúcim z "val" a čísel.
  • Pridaná podpora pre operácie so zoznamami, napríklad „SELECT [x + 1 pre x v [1, 2, 3]] AS l;“.
  • Spotreba pamäte bola optimalizovaná. Platforma Linux štandardne používa na správu pamäte knižnicu jemalloc. Výrazne zlepšený výkon operácií spájania hash pri obmedzenej pamäti.
  • Do rozhrania príkazového riadka bol pridaný výstupný režim „.mode duckbox“, ktorý zahodí stredné stĺpce s prihliadnutím na šírku okna terminálu (vhodné na rýchle vizuálne vyhodnotenie výsledkov dotazov s veľkým počtom stĺpcov, ako napríklad „SELECT * FROM tbl“, ktoré sú v normálnom režime rozložené do niekoľkých riadkov). Pomocou parametra „.maxrows X“ môžete dodatočne obmedziť počet zobrazených riadkov.
  • CLI poskytuje automatické dopĺňanie vstupu s prihliadnutím na kontext (dokončuje sa zadávanie kľúčových slov, názvov tabuliek, funkcií, názvov stĺpcov a súborov).
  • CLI má štandardne povolený indikátor priebehu dotazu.

Zdroj: opennet.ru

Pridať komentár