Objavljena DuckDB 0.6.0, SQLite varijanta za analitičke upite

Dostupno je izdanje DuckDB 0.6.0 DBMS, koje kombinuje svojstva SQLite-a kao što su kompaktnost, mogućnost povezivanja u obliku ugrađene biblioteke, pohranjivanje baze podataka u jednu datoteku i pogodan CLI interfejs, sa alatima i optimizacijama za izvršavanje analitički upiti koji pokrivaju značajan dio pohranjenih podataka, na primjer koji agregiraju cijeli sadržaj tablica ili spajaju nekoliko velikih tablica. Šifra projekta se distribuira pod MIT licencom. Razvoj je još uvijek u fazi formiranja eksperimentalnih izdanja, budući da format pohrane još nije stabiliziran i mijenja se od verzije do verzije.

DuckDB pruža napredni SQL dijalekt koji uključuje dodatne mogućnosti za rukovanje vrlo složenim i dugotrajnim upitima. Podržana je upotreba složenih tipova (nizovi, strukture, unije) i mogućnost izvršavanja proizvoljnih i ugniježđenih korelacijskih potupita. Podržava pokretanje više upita istovremeno, pokretanje upita direktno iz CSV i Parket datoteka. Moguć je uvoz iz PostgreSQL DBMS-a.

Pored shell koda iz SQLite-a, projekat koristi parser iz PostgreSQL-a u zasebnoj biblioteci, komponentu Date Math iz MonetDB-a, vlastitu implementaciju prozorskih funkcija (baziranu na algoritmu Segment Tree Aggregation), procesor regularnih izraza zasnovan na RE2 biblioteku, vlastiti optimizator upita i MVCC kontrolni mehanizam za istovremeno izvršavanje zadataka (Multi-Version Concurrency Control), kao i vektorizirani mehanizam za izvršavanje upita baziran na algoritmu Hyper-Pipelining Query Execution, koji omogućava velike skupove vrijednosti da se obrađuju odjednom u jednoj operaciji.

Među promjenama u novom izdanju:

  • Nastavljen je rad na poboljšanju formata skladištenja. Implementiran je optimističan način pisanja na disk, u kojem se prilikom učitavanja velikog skupa podataka u jednoj transakciji, podaci komprimiraju i upisuju u datoteku iz baze podataka u streaming modu, bez čekanja da se transakcija potvrdi naredbom COMMIT. . Kada se primi naredba COMMIT, podaci su već zapisani na disk, a kada se izvrši ROLLBACK, oni se odbacuju. Ranije su podaci inicijalno bili u potpunosti pohranjeni u memoriju, a kada su urezani, spremljeni su na disk.
  • Dodata podrška za paralelno učitavanje podataka u zasebne tabele, što vam omogućava da značajno povećate brzinu učitavanja na sistemima sa više jezgara. Na primjer, u prethodnom izdanju, učitavanje baze podataka sa 150 miliona redova na 10-jezgrenom CPU-u trajalo je 91 sekundu, ali u novoj verziji ova operacija je završena za 17 sekundi. Postoje dva režima paralelnog učitavanja - sa očuvanjem redosleda zapisa i bez očuvanja reda.
  • Za kompresiju podataka koristi se algoritam FSST (Fast Static Symbol Table), koji vam omogućava da spakujete podatke unutar nizova koristeći zajednički rječnik tipičnih podudaranja. Upotreba novog algoritma omogućila je smanjenje veličine testne baze podataka sa 761MB na 251MB.
  • Predloženi su algoritmi Chimp i Patas za komprimiranje brojeva s pomičnim zarezom (DOUBLE i FLOAT). U poređenju sa prethodnim algoritmom Gorillas, Chimp pruža viši nivo kompresije i bržu dekompresiju. Patas algoritam zaostaje za Chimp-om u omjeru kompresije, ali je mnogo brži u brzini dekompresije, što se gotovo ne razlikuje od čitanja nekomprimiranih podataka.
  • Dodata je eksperimentalna mogućnost učitavanja podataka iz CSV datoteka u više paralelnih tokova (SET experimental_parallel_csv=true), što značajno smanjuje vrijeme potrebno za učitavanje velikih CSV datoteka. Na primjer, kada je ova opcija omogućena, vrijeme preuzimanja CSV datoteke od 720 MB smanjeno je sa 3.5 na 0.6 sekundi.
  • Implementirana je mogućnost paralelnog izvršavanja operacija kreiranja indeksa i upravljanja. Na primjer, operacija CREATE INDEX na koloni sa 16 miliona zapisa smanjena je sa 5.92 na 1.38 sekundi.
  • Omogućena je paralelizacija operacija agregacije u upitima koji sadrže izraz “COUNT(DISTINCT col)”.
  • SQL je dodao podršku za tip UNION, koji omogućava vezivanje više tipova na jedan element (na primjer, “UNION(broj INT, greška VARCHAR))”).
  • SQL pruža mogućnost formiranja upita koji počinju riječju “FROM” umjesto “SELECT”. U ovom slučaju, pretpostavlja se da upit počinje sa "SELECT *".
  • SQL je dodao podršku za COLUMNS izraz, koji vam omogućava da izvedete operaciju na više stupaca bez dupliciranja izraza. Na primjer, “SELECT MIN(COLUMNS(*)) from obs;” će uzrokovati izvršavanje funkcije MIN za svaki stupac u tablici obs, a "SELECT COLUMNS('val[0-9]+') from obs;" za stupce s imenom koje se sastoji od "val" i brojeva.
  • Dodata podrška za operacije na listama, na primjer, “SELECT [x + 1 for x in [1, 2, 3]] AS l;”.
  • Potrošnja memorije je optimizirana. Podrazumevano, Linux platforma koristi jemalloc biblioteku za upravljanje memorijom. Značajno poboljšane performanse operacija spajanja hešova kada je memorija ograničena.
  • Dodan način izlaza “.mode duckbox” u interfejs komandne linije, koji odbacuje srednje kolone uzimajući u obzir širinu prozora terminala (pogodno za brzo vizuelno procenjivanje rezultata upita sa velikim brojem kolona, ​​kao što je “SELECT * FROM tbl”, koji su u normalnom načinu rada raspoređeni u nekoliko redova). Koristeći parametar “.maxrows X”, možete dodatno ograničiti broj prikazanih redova.
  • CLI obezbeđuje automatsko dovršavanje unosa uzimajući u obzir kontekst (unos ključnih reči, imena tabela, funkcija, naziva kolona i imena datoteka je završen).
  • CLI ima indikator napretka upita omogućen prema zadanim postavkama.

izvor: opennet.ru

Dodajte komentar