Objavljeno DuckDB 0.6.0, možnost SQLite za analitične poizvedbe

Na voljo je izdaja DuckDB 0.6.0 DBMS, ki združuje lastnosti SQLite, kot so kompaktnost, možnost povezovanja v obliki vdelane knjižnice, shranjevanje baze podatkov v eno datoteko in priročen vmesnik CLI z orodji in optimizacijami za izvajanje analitične poizvedbe, ki pokrivajo pomemben del shranjenih podatkov, na primer, ki združujejo celotno vsebino tabel ali združujejo več velikih tabel. Koda projekta se distribuira pod licenco MIT. Razvoj je še vedno v fazi oblikovanja eksperimentalnih izdaj, saj format shranjevanja še ni stabiliziran in se spreminja od različice do različice.

DuckDB ponuja napredno narečje SQL, ki vključuje dodatne zmogljivosti za obravnavanje zelo zapletenih in zamudnih poizvedb. Podprta je uporaba kompleksnih tipov (nizov, struktur, unij) in zmožnost izvajanja poljubnih in ugnezdenih korelacijskih podpoizvedb. Podpira izvajanje več poizvedb hkrati, izvajanje poizvedb neposredno iz datotek CSV in Parquet. Možen je uvoz iz DBMS PostgreSQL.

Poleg lupinske kode iz SQLite projekt uporablja razčlenjevalec iz PostgreSQL v ločeni knjižnici, komponento Date Math iz MonetDB, lastno izvedbo okenskih funkcij (na podlagi algoritma Segment Tree Aggregation), procesor regularnih izrazov, ki temelji na knjižnica RE2, lasten optimizator poizvedb in nadzorni mehanizem MVCC sočasno izvajanje nalog (Multi-Version Concurrency Control), kot tudi vektoriziran mehanizem za izvajanje poizvedb, ki temelji na algoritmu Hyper-Pipeling Query Execution, ki omogoča velike nabore vrednosti da se obdelajo naenkrat v eni operaciji.

Med spremembami v novi izdaji:

  • Nadaljevalo se je delo za izboljšanje formata shranjevanja. Implementiran je optimističen način pisanja na disk, pri katerem se pri nalaganju velikega nabora podatkov v eni transakciji podatki stisnejo in zapišejo v datoteko iz baze v pretočnem načinu, brez čakanja na potrditev transakcije z ukazom COMMIT . Ko je prejet ukaz COMMIT, so podatki že zapisani na disk, in ko se izvede ROLLBACK, se zavržejo. Prej so bili podatki sprva v celoti shranjeni v pomnilnik, po potrditvi pa so bili shranjeni na disk.
  • Dodana podpora za vzporedno nalaganje podatkov v ločene tabele, kar vam omogoča znatno povečanje hitrosti nalaganja v večjedrnih sistemih. Na primer, v prejšnji izdaji je nalaganje baze podatkov s 150 milijoni vrstic na 10-jedrni CPE trajalo 91 sekund, v novi različici pa je ta operacija končana v 17 sekundah. Obstajata dva načina vzporednega nalaganja - z ohranjanjem vrstnega reda zapisov in brez ohranjanja vrstnega reda.
  • Za stiskanje podatkov se uporablja algoritem FSST (Fast Static Symbol Table), ki omogoča pakiranje podatkov znotraj nizov z uporabo skupnega slovarja tipičnih ujemanj. Uporaba novega algoritma je omogočila zmanjšanje velikosti testne baze s 761MB na 251MB.
  • Algoritma Chimp in Patas sta bila predlagana za stiskanje števil s plavajočo vejico (DOUBLE in FLOAT). V primerjavi s prejšnjim algoritmom Gorillas Chimp zagotavlja višje stopnje kompresije in hitrejšo dekompresijo. Algoritem Patas zaostaja za Chimpom v kompresijskem razmerju, vendar je veliko hitrejši pri hitrosti dekompresije, ki se skoraj ne razlikuje od branja nestisnjenih podatkov.
  • Dodana eksperimentalna zmožnost nalaganja podatkov iz datotek CSV v več vzporednih tokov (SET experimental_parallel_csv=true), kar bistveno skrajša čas, potreben za nalaganje velikih datotek CSV. Na primer, ko je bila ta možnost omogočena, se je čas prenosa za 720 MB veliko datoteko CSV zmanjšal s 3.5 na 0.6 sekunde.
  • Implementirana je možnost vzporednega izvajanja operacij ustvarjanja in upravljanja indeksov. Na primer, operacija CREATE INDEX v stolpcu s 16 milijoni zapisov je bila skrajšana s 5.92 na 1.38 sekunde.
  • Omogočena vzporednica operacij združevanja v poizvedbah, ki vsebujejo izraz »COUNT(DISTINCT col)«.
  • SQL je dodal podporo za tip UNION, ki omogoča vezavo več tipov na en element (na primer »UNION(num INT, error VARCHAR))«).
  • SQL omogoča oblikovanje poizvedb, ki se začnejo z besedo »FROM« namesto z »SELECT«. V tem primeru se predpostavlja, da se poizvedba začne z "SELECT *".
  • SQL je dodal podporo za izraz COLUMNS, ki vam omogoča izvajanje operacije na več stolpcih brez podvajanja izraza. Na primer, "SELECT MIN(COLUMNS(*)) from obs;" bo povzročilo izvedbo funkcije MIN za vsak stolpec v tabeli obs in "SELECT COLUMNS('val[0-9]+') from obs;" za stolpce z imenom, sestavljenim iz "val" in številk.
  • Dodana podpora za operacije na seznamih, na primer »IZBERI [x + 1 za x v [1, 2, 3]] AS l;«.
  • Poraba pomnilnika je optimizirana. Platforma Linux privzeto uporablja knjižnico jemalloc za upravljanje pomnilnika. Znatno izboljšana zmogljivost operacij združevanja zgoščenih vrednosti, ko je pomnilnik omejen.
  • Vmesniku ukazne vrstice je dodan izhodni način ».mode duckbox«, ki zavrže srednje stolpce glede na širino okna terminala (primerno za hitro vizualno ocenjevanje rezultatov poizvedb z velikim številom stolpcev, kot je »SELECT * FROM tbl«, ki so v običajnem načinu razporejeni v več vrsticah). S parametrom “.maxrows X” lahko dodatno omejite število prikazanih vrstic.
  • CLI omogoča samodejno dokončanje vnosa ob upoštevanju konteksta (dokončan je vnos ključnih besed, imen tabel, funkcij, imen stolpcev in imen datotek).
  • CLI ima privzeto omogočen indikator napredka poizvedbe.

Vir: opennet.ru

Dodaj komentar