Zveřejněna verze DuckDB 0.6.0, SQLite varianta pro analytické dotazy

K dispozici je vydání DuckDB 0.6.0 DBMS, které kombinuje takové vlastnosti SQLite, jako je kompaktnost, možnost připojení ve formě vestavěné knihovny, ukládání databáze do jednoho souboru a pohodlné rozhraní CLI s nástroji a optimalizacemi pro spouštění analytické dotazy pokrývající významnou část uložených dat, například agregují celý obsah tabulek nebo slučují několik velkých tabulek. Kód projektu je distribuován pod licencí MIT. Vývoj je stále ve fázi formování experimentálních verzí, protože formát úložiště ještě není stabilizovaný a mění se verze od verze.

DuckDB poskytuje pokročilý SQL dialekt, který zahrnuje další možnosti pro zpracování velmi složitých a časově náročných dotazů. Je podporováno použití komplexních typů (pole, struktury, sjednocení) a schopnost spouštět libovolné a vnořené korelující poddotazy. Podporuje spouštění více dotazů současně, spouštění dotazů přímo ze souborů CSV a Parquet. Je možné importovat z PostgreSQL DBMS.

Kromě shell kódu z SQLite projekt využívá parser z PostgreSQL v samostatné knihovně, komponentu Date Math z MonetDB, vlastní implementaci okenních funkcí (založenou na algoritmu Segment Tree Aggregation), procesor regulárních výrazů založený na knihovna RE2, vlastní optimalizátor dotazů a řídicí mechanismus MVCC pro současné provádění úloh (Multi-Version Concurrency Control), stejně jako vektorizovaný stroj pro provádění dotazů založený na algoritmu Hyper-Pipelining Query Execution, který umožňuje velké sady hodnot zpracovat najednou v jedné operaci.

Mezi změny v nové verzi:

  • Pokračovaly práce na vylepšení formátu úložiště. Byl implementován optimistický režim zápisu na disk, ve kterém se při načítání velké sady dat v jedné transakci data komprimují a zapisují do souboru z databáze v režimu streamování, aniž by se čekalo na potvrzení transakce příkazem COMMIT. . Když je přijat příkaz COMMIT, data jsou již zapsána na disk, a když je proveden ROLLBACK, jsou zahozena. Dříve byla data zpočátku zcela ukládána do paměti a po potvrzení byla uložena na disk.
  • Přidána podpora pro paralelní načítání dat do samostatných tabulek, což umožňuje výrazně zvýšit rychlost načítání na vícejádrových systémech. Například v předchozí verzi trvalo načítání databáze se 150 miliony řádků na 10jádrovém CPU 91 sekund, ale v nové verzi je tato operace dokončena za 17 sekund. Existují dva paralelní režimy načítání – se zachováním pořadí záznamů a bez zachování pořadí.
  • Pro kompresi dat se používá algoritmus FSST (Fast Static Symbol Table), který umožňuje zabalit data do řetězců pomocí běžného slovníku typických shod. Použití nového algoritmu umožnilo snížit velikost testovací databáze ze 761 MB na 251 MB.
  • Pro kompresi čísel s pohyblivou řádovou čárkou byly navrženy algoritmy Chimp a Patas (DOUBLE a FLOAT). Ve srovnání s dříve používaným algoritmem Gorillas poskytuje Chimp vyšší úroveň komprese a rychlejší dekompresi. Algoritmus Patas zaostává za Chimpem v kompresním poměru, ale je mnohem rychlejší v rychlosti dekomprese, která se téměř neliší od čtení nekomprimovaných dat.
  • Byla přidána experimentální možnost načítání dat ze souborů CSV do více paralelních streamů (SET experimental_parallel_csv=true), což výrazně zkracuje dobu potřebnou k načítání velkých souborů CSV. Pokud byla například tato možnost povolena, doba stahování souboru CSV o velikosti 720 MB se zkrátila z 3.5 na 0.6 sekundy.
  • Byla implementována možnost paralelního provádění operací vytváření a správy indexů. Například operace CREATE INDEX na sloupci s 16 miliony záznamů byla zkrácena z 5.92 na 1.38 sekundy.
  • Povolena paralelizace agregačních operací v dotazech obsahujících výraz „COUNT(DISTINCT col)“.
  • SQL přidalo podporu pro typ UNION, který umožňuje svázat více typů s jedním prvkem (například „UNION(num INT, chyba VARCHAR)“)).
  • SQL poskytuje možnost tvořit dotazy, které začínají slovem „FROM“ namísto „SELECT“. V tomto případě se předpokládá, že dotaz začíná "SELECT *".
  • SQL přidal podporu pro výraz COLUMNS, který vám umožňuje provádět operaci s více sloupci bez duplikace výrazu. Například „SELECT MIN(COLUMNS(*)) from obs;“ způsobí provedení funkce MIN pro každý sloupec v tabulce obs a "SELECT COLUMNS('val[0-9]+') from obs;" pro sloupce s názvem skládajícím se z "val" a čísel.
  • Přidána podpora pro operace se seznamy, například „SELECT [x + 1 for x in [1, 2, 3]] AS l;“.
  • Spotřeba paměti byla optimalizována. Platforma Linux standardně používá pro správu paměti knihovnu jemalloc. Výrazně zlepšený výkon operací slučování hash při omezené paměti.
  • Do rozhraní příkazového řádku byl přidán výstupní režim „.mode duckbox“, který zahazuje prostřední sloupce s ohledem na šířku okna terminálu (vhodné pro rychlé vizuální posouzení výsledků dotazů s velkým počtem sloupců, jako je „SELECT * FROM tbl“, které jsou v normálním režimu rozloženy do několika řádků). Pomocí parametru „.maxrows X“ můžete navíc omezit počet zobrazených řádků.
  • CLI poskytuje automatické doplňování vstupu s ohledem na kontext (je dokončeno zadávání klíčových slov, názvů tabulek, funkcí, názvů sloupců a souborů).
  • CLI má ve výchozím nastavení povolený indikátor průběhu dotazu.

Zdroj: opennet.ru

Přidat komentář