DuckDB 0.6.0 avaldatud, SQLite'i valik analüütiliste päringute jaoks

Saadaval on DuckDB 0.6.0 DBMS-i väljalase, mis ühendab sellised SQLite'i omadused nagu kompaktsus, manustatud teegi kujul ühenduse loomise võimalus, andmebaasi salvestamine ühes failis ja mugav CLI-liides koos tööriistade ja käivitamise optimeerimisega. analüütilised päringud, mis hõlmavad olulist osa salvestatud andmetest, näiteks mis koondavad kogu tabelite sisu või ühendavad mitu suurt tabelit. Projekti koodi levitatakse MIT litsentsi all. Arendus on endiselt eksperimentaalsete väljaannete moodustamise etapis, kuna salvestusvormingut pole veel stabiliseerunud ja see muutub versiooniti.

DuckDB pakub täiustatud SQL-i dialekti, mis sisaldab lisavõimalusi väga keeruliste ja aeganõudvate päringute käsitlemiseks. Toetatud on keeruliste tüüpide (massiivid, struktuurid, ühendused) kasutamine ning suvaliste ja pesastatud korreleerivate alampäringute käivitamise võimalus. See toetab mitme päringu samaaegset käitamist, päringute käitamist otse CSV- ja Parquet-failidest. PostgreSQL DBMS-ist on võimalik importida.

Lisaks SQLite’i shellkoodile kasutab projekt eraldi teegis PostgreSQL-i parserit, MonetDB-st Date Math komponenti, oma aknafunktsioonide teostust (segmendipuu koondamisalgoritmi alusel), regulaaravaldise protsessorit, mis põhineb RE2 teek, oma päringu optimeerija ja MVCC juhtimismehhanism ülesannete samaaegseks täitmiseks (Multi-Version Concurrency Control), samuti vektoriseeritud päringu täitmismootor, mis põhineb Hyper-Pipelining Query Execution algoritmil, mis võimaldab suuri väärtuste komplekte töödelda korraga ühe toiminguga.

Uue versiooni muudatuste hulgas:

  • Jätkati tööd salvestusvormingu täiustamiseks. Rakendatud on optimistlik ketta kirjutamise režiim, mille puhul suure andmehulga laadimisel ühe tehinguga tihendatakse andmed ja kirjutatakse voogedastusrežiimis andmebaasist faili, ootamata tehingu kinnitamist käsuga COMMIT. . COMMIT-käsu vastuvõtmisel kirjutatakse andmed juba kettale ja ROLLBACKi käivitamisel visatakse need kõrvale. Varem salvestati andmed algselt täielikult mällu ja sidumisel salvestati need kettale.
  • Lisatud on andmete paralleelse laadimise tugi eraldi tabelitesse, mis võimaldab mitmetuumalistes süsteemides laadimiskiirust oluliselt suurendada. Näiteks eelmises versioonis võttis 150-tuumalisel CPU-l 10 miljoni reaga andmebaasi laadimine 91 sekundit, uues versioonis aga tehakse see toiming 17 sekundiga. On kaks paralleelset laadimisrežiimi – kirjete järjekorra säilitamisega ja ilma järjekorra säilitamiseta.
  • Andmete tihendamiseks kasutatakse FSST (Fast Static Symbol Table) algoritmi, mis võimaldab pakkida andmeid stringide sisse, kasutades tavalist tüüpiliste vastete sõnastikku. Uue algoritmi kasutamine võimaldas vähendada testandmebaasi suurust 761MB pealt 251MB peale.
  • Ujukomaarvude tihendamiseks (DOUBLE ja FLOAT) on välja pakutud šimpansi ja patase algoritme. Võrreldes eelmise Gorillase algoritmiga pakub Chimp kõrgemat tihendustaset ja kiiremat dekompressiooni. Patase algoritm jääb Chimpist maha tihendusastmelt, kuid on palju kiirem dekompressioonikiiruselt, mis peaaegu ei erine tihendamata andmete lugemisest.
  • Lisatud on eksperimentaalne võimalus laadida andmeid CSV-failidest mitmesse paralleelsesse voogu (SET experimental_parallel_csv=true), mis vähendab oluliselt suurte CSV-failide laadimiseks kuluvat aega. Näiteks kui see valik oli lubatud, vähenes 720 MB CSV-faili allalaadimisaeg 3.5 sekundilt 0.6 sekundile.
  • Rakendatud on indeksi loomise ja haldamise operatsioonide paralleelse teostamise võimalus. Näiteks 16 miljoni kirjega veeru CREATE INDEX toimingut vähendati 5.92 sekundilt 1.38 sekundile.
  • Lubatud on koondamistoimingute paralleelsus päringutes, mis sisaldavad väljendit „COUNT(DISTINCT col)”.
  • SQL on lisanud tüübi UNION toe, mis võimaldab ühe elemendiga siduda mitu tüüpi (näiteks "UNION(num INT, error VARCHAR)").
  • SQL annab võimaluse moodustada päringuid, mis algavad sõnaga „FROM” mitte „SELECT”. Sel juhul eeldatakse, et päring algab tähega "SELECT *".
  • SQL on lisanud toe avaldisele COLUMNS, mis võimaldab teha toimingu mitme veeruga ilma avaldist dubleerimata. Näiteks "VALI MIN(VEERUD(*)) obs;" põhjustab funktsiooni MIN käivitamise iga obs-tabeli veeru jaoks ja "SELECT COLUMNS('val[0-9]+') from obs;" veergudele, mille nimi koosneb "val" ja numbritest.
  • Lisatud on tugi loenditoimingutele, näiteks „SELECT [x + 1 for x in [1, 2, 3]] AS l;”.
  • Mälukulu on optimeeritud. Vaikimisi kasutab Linuxi platvorm mälu haldamiseks jemalloci teeki. Märkimisväärselt paranenud räsiühendamistoimingute jõudlus, kui mälu on piiratud.
  • Käsurea liidesele on lisatud “.mode duckbox” väljundrežiim, mis jätab terminali akna laiust arvesse võttes kõrvale keskmised veerud (sobib suure veergude arvuga päringute tulemuste kiireks visuaalseks hindamiseks, näiteks “SELECT * FROM tbl”, mis tavarežiimis on jaotatud mitmele reale). Parameetri „.maxrows X” abil saate kuvatavate ridade arvu täiendavalt piirata.
  • CLI pakub sisendi automaatset lõpetamist, võttes arvesse konteksti (lõpetatakse märksõnade, tabelinimede, funktsioonide, veergude ja failinimede sisestamine).
  • CLI-l on päringu edenemise indikaator vaikimisi lubatud.

Allikas: opennet.ru

Lisa kommentaar