Byl zveřejněn DuckDB 0.6.0, alternativa SQLite pro analytické dotazy

Byl vydán nový release databázového systému DuckDB 0.6.0, který kombinuje vlastnosti SQLite, jako je kompaktnost, možnost připojení ve formě zabudované knihovny, ukládání databáze do jednoho souboru a uživatelsky přívětivé CLI rozhraní, se prostředky a optimalizacemi pro provádění analytických dotazů pokrývajících významnou část uložených dat, například provádějící agregaci veškerého obsahu tabulek nebo sloučení několika velkých tabulek. Kód projektu je distribuován pod licencí MIT. Vývoj se zatím nachází ve fázi experimentálních vydání, jelikož formát úložiště zatím nebyl stabilizován a mění se z verze na verzi.

DuckDB poskytuje rozšířený dialekt jazyka SQL, zahrnující další možnosti pro zpracování velmi složitých a časově náročných dotazů. Podporuje použití složených typů (pole, struktury, unie) a možnost provádění libovolných a vložených korelovaných poddotazů. Podporuje současné provádění několika dotazů, provádění dotazů přímo z souborů ve formátu CSV a Parquet. Je k dispozici možnost importu z DBMS PostgreSQL.

Kromě SQLite shell kódu projekt využívá parser vyčleněný do samostatné knihovny z PostgreSQL, komponentu Date Math z MonetDB, vlastní implementaci oknových funkcí (na základě algoritmu Segment Tree Aggregation), zpracovatel regulárních výrazů založený na knihovně RE2, vlastní optimalizátor dotazů, MVCC mechanismus pro správu souběžného vykonávání úloh (Multi-Version Concurrency Control) a také vektorový engine vykonávání dotazů založený na algoritmu Hyper-Pipelining Query Execution, který umožňuje zpracovávat velké množství hodnot v jednom operaci.

Mezi změnami v novém vydání:

  • Pokračuje práce na vylepšení formátu úložiště. Bylo implementováno optimistické zapisování na disk, při kterém se při nahrávání velkého množství dat v jedné transakci data komprimují a streamově zapisují do souboru s databází, aniž by čekala na dokončení potvrzení transakce příkazem COMMIT. Při přijetí příkazu COMMIT jsou data již zapsána na disk a při provádění ROLLBACK jsou odmítnuta. Dříve se data nejprve plně ukládala do paměti a při commitu se ukládala na disk.
  • Byla přidána podpora paralelního načítání dat do samostatných tabulek, což výrazně zvyšuje rychlost načítání na vícejádrových systémech. Například v předchozím vydání trvalo načtení databáze s 150 miliony řádků na 10jádrovém CPU 91 sekund, zatímco v nové verzi je tato operace provedena za 17 sekund. Jsou k dispozici dva režimy paralelního načítání – s udržováním pořadí záznamů a bez udržování pořadí.
  • Pro kompresi dat byl použit algoritmus FSST (Fast Static Symbol Table), který umožňuje balení dat uvnitř řetězců pomocí společného slovníku typových shod. Použití nového algoritmu umožnilo zmenšit velikost testovací databáze z 761 MB na 251 MB.
  • Pro kompresi čísel s plovoucí desetinnou čárkou (DOUBLE a FLOAT) byly navrženy algoritmy Chimp a Patas. Ve srovnání s dříve používaným algoritmem Gorillas zajišťuje Chimp vyšší úroveň komprese a rychlejší dekompresi. Algoritmus Patas zaostává co do míry komprese za Chimpem, ale je výrazně rychlejší při dekompresi, která se téměř neliší od čtení nekomprimovaných dat.
  • Byla přidána experimentální funkce pro paralelní načítání dat z CSV souborů (SET experimental_parallel_csv=true), což výrazně zkracuje dobu načítání velkých CSV souborů. Například, při zapnutí této možnosti se doba načítání CSV souboru o velikosti 720 MB 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 doba provádění operace CREATE INDEX pro sloupec s 16 miliony záznamů se zkrátila z 5,92 na 1,38 sekundy.
  • Byla zajištěna paralelizace agregačních operací v dotazech obsahujících výraz „COUNT(DISTINCT col)“.
  • V SQL byla přidána podpora pro typ UNION, který umožňuje vazbu na jeden prvek více typů (například „UNION(num INT, error VARCHAR)“).
  • V SQL byla poskytnuta možnost vytváření dotazů začínajících slovem „FROM“ namísto „SELECT“. V tomto případě se předpokládá, že dotaz začíná na „SELECT *“.
  • V SQL byla přidána podpora pro výraz „COLUMNS“, který umožňuje provést operaci na více sloupcích bez duplicity výrazu. Například „SELECT MIN(COLUMNS(*)) from obs;“ provede funkci MIN pro každý sloupec v tabulce obs, a „SELECT COLUMNS(‘val[0-9]+’) from obs;“ pro sloupce s názvem složeným z „val“ a číslic.
  • Byla přidána podpora pro operace se seznamy, například „SELECT [x + 1 for x in [1, 2, 3]] AS l;“.
  • Byla provedena optimalizace spotřeby paměti. Ve výchozím nastavení je na platformě Linux pro správu paměti použita knihovna jemalloc. Výrazně byla zlepšena výkonnost operací sloučení hashů při omezené velikosti paměti.
  • Do příkazového rozhraní byla přidána výstupní režim „.mode duckbox“, který odstraňuje střední sloupce s ohledem na šířku okna terminálu (vhodné pro rychlé zhodnocení výsledků dotazů s mnoha sloupci, jako například „SELECT * FROM tbl“, které se v běžném režimu rozprostírají na několik řádků). Pomocí parametru „.maxrows X“ lze dále omezit také počet zobrazených řádků.
  • V CLI byla zajištěna automatická doplnění vstupu s ohledem na kontext (doplňuje se vstup klíčových slov, názvů tabulek, funkcí, názvů sloupců a názvů souborů).
  • V CLI je výchozí nastavení zobrazení indikátoru postupu provádění dotazu.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster