Objavljena DuckDB 0.6.0, SQLite varijanta za analitičke upite

Dostupno je izdanje DuckDB 0.6.0 DBMS-a, koje kombinira takva svojstva SQLite-a kao što su kompaktnost, mogućnost povezivanja u obliku ugrađene knjižnice, pohranjivanje baze podataka u jednu datoteku i prikladno CLI sučelje, s alatima i optimizacijama za izvođenje analitički upiti koji pokrivaju značajan dio pohranjenih podataka, na primjer koji agregiraju cijeli sadržaj tablica ili spajaju nekoliko velikih tablica. Kod projekta se distribuira pod licencom MIT-a. 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 podupita. Podržava pokretanje više upita istovremeno, pokretanje upita izravno iz CSV i Parquet datoteka. Moguć je uvoz iz PostgreSQL DBMS-a.

Osim shell koda iz SQLite-a, projekt koristi parser iz PostgreSQL-a u zasebnoj biblioteci, komponentu Date Math iz MonetDB-a, vlastitu implementaciju prozorskih funkcija (na temelju algoritma Segment Tree Aggregation), regularni procesor izraza temeljen na biblioteka RE2, vlastiti optimizator upita i MVCC kontrolni mehanizam istovremeno izvršavanje zadataka (Multi-Version Concurrency Control), kao i vektorizirani mehanizam za izvršavanje upita temeljen na algoritmu Hyper-Pipeling Query Execution, koji omogućuje velike skupove vrijednosti da se obrađuju odjednom u jednoj operaciji.

Među promjenama u novom izdanju:

  • Nastavljen je rad na poboljšanju formata pohrane. Implementiran je optimističan način pisanja na disk, u kojem se prilikom učitavanja velikog skupa podataka u jednoj transakciji podaci komprimiraju i zapisuju u datoteku iz baze podataka u strujanom načinu, 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. Prethodno su podaci u početku bili potpuno spremljeni u memoriju, a kada su predani, spremljeni su na disk.
  • Dodana podrška za paralelno učitavanje podataka u zasebne tablice, što vam omogućuje značajno povećanje brzine učitavanja na višejezgrenim sustavima. Na primjer, u prethodnom izdanju, učitavanje baze podataka sa 150 milijuna redaka na CPU-u s 10 jezgri trajalo je 91 sekundu, ali u novoj verziji ova se operacija dovršava za 17 sekundi. Postoje dva paralelna načina učitavanja - s očuvanjem redoslijeda zapisa i bez očuvanja reda.
  • Za kompresiju podataka koristi se FSST (Fast Static Symbol Table) algoritam koji vam omogućuje pakiranje podataka unutar nizova pomoću zajedničkog rječnika tipičnih podudaranja. Korištenje novog algoritma omogućilo je smanjenje veličine testne baze podataka sa 761 MB na 251 MB.
  • Predloženi su algoritmi Chimp i Patas za komprimiranje brojeva s pomičnim zarezom (DOUBLE i FLOAT). U usporedbi s prethodnim algoritmom Gorillas, Chimp pruža više razine kompresije i bržu dekompresiju. Patasov algoritam zaostaje za Chimpom u omjeru kompresije, ali je puno brži u brzini dekompresije, što se gotovo ne razlikuje od čitanja nekomprimiranih podataka.
  • Dodana 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 bila omogućena, vrijeme preuzimanja za CSV datoteku od 720 MB smanjeno je s 3.5 na 0.6 sekundi.
  • Implementirana je mogućnost paralelnog izvođenja operacija kreiranja i upravljanja indeksima. Na primjer, operacija CREATE INDEX na stupcu sa 16 milijuna zapisa smanjena je s 5.92 na 1.38 sekundi.
  • Omogućena je paralelizacija operacija združivanja u upitima koji sadrže izraz "COUNT(DISTINCT col)".
  • SQL je dodao podršku za tip UNION, koji omogućuje da se više tipova veže za jedan element (na primjer, “UNION(num INT, error 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 s "SELECT *".
  • SQL je dodao podršku za izraz COLUMNS, koji vam omogućuje izvođenje operacije na više stupaca bez dupliciranja izraza. Na primjer, "SELECT MIN(COLUMNS(*)) from obs;" uzrokovat će izvršavanje funkcije MIN za svaki stupac u obs tablici i "SELECT COLUMNS('val[0-9]+') from obs;" za stupce s nazivom koji se sastoji od "val" i brojeva.
  • Dodana je podrška za operacije na popisima, na primjer, “SELECT [x + 1 for x in [1, 2, 3]] AS l;”.
  • Potrošnja memorije je optimizirana. Prema zadanim postavkama, platforma Linux koristi biblioteku jemalloc za upravljanje memorijom. Značajno poboljšana izvedba operacija spajanja hash vrijednosti kada je memorija ograničena.
  • Dodan način izlaza “.mode duckbox” u sučelje naredbenog retka, koji odbacuje srednje stupce uzimajući u obzir širinu prozora terminala (pogodno za brzu vizualnu procjenu rezultata upita s velikim brojem stupaca, kao što je “SELECT * FROM tbl”, koji se u normalnom načinu rada prostiru u nekoliko redaka). Pomoću parametra “.maxrows X” možete dodatno ograničiti broj prikazanih redaka.
  • CLI omogućuje automatsko dovršavanje unosa uzimajući u obzir kontekst (dovršava se unos ključnih riječi, naziva tablica, funkcija, naziva stupaca i naziva datoteka).
  • CLI ima indikator napredovanja upita omogućen prema zadanim postavkama.

Izvor: opennet.ru

Dodajte komentar