Saatavilla on DuckDB 0.6.0 DBMS:n julkaisu, jossa yhdistyvät sellaiset SQLiten ominaisuudet kuin tiiviys, kyky muodostaa yhteys sulautetun kirjaston muodossa, tietokannan tallentaminen yhteen tiedostoon ja kätevä CLI-käyttöliittymä sekä työkalut ja optimoinnit suoritusta varten. analyyttiset kyselyt, jotka kattavat merkittävän osan tallennetusta tiedosta, esimerkiksi yhdistävät taulukoiden koko sisällön tai yhdistävät useita suuria taulukoita. Projektikoodia jaetaan MIT-lisenssillä. Kehitys on vielä kokeellisten julkaisujen muodostamisvaiheessa, koska tallennusmuotoa ei ole vielä vakiintunut ja se muuttuu versiosta toiseen.
DuckDB tarjoaa edistyneen SQL-murteen, joka sisältää lisäominaisuuksia erittäin monimutkaisten ja aikaa vievien kyselyiden käsittelyyn. Monimutkaisten tyyppien (taulukot, rakenteet, liitot) käyttöä ja kykyä suorittaa mielivaltaisia ja sisäkkäisiä korreloivia alikyselyjä tuetaan. Se tukee useiden kyselyjen suorittamista samanaikaisesti, kyselyjen suorittamista suoraan CSV- ja Parquet-tiedostoista. On mahdollista tuoda PostgreSQL DBMS:stä.
Projektissa käytetään SQLiten shell-koodin lisäksi erillisessä kirjastossa olevaa PostgreSQL:n jäsentäjää, MonetDB:n Date Math -komponenttia, omaa ikkunatoimintojen toteutusta (perustuu Segment Tree Aggregation -algoritmiin), säännölliseen lausekkeeseen perustuvaa prosessoria. RE2-kirjasto, oma kyselyn optimoija ja MVCC-ohjausmekanismi tehtävien samanaikaiseen suorittamiseen (Multi-Version Concurrency Control) sekä vektorisoitu kyselyn suoritusmoottori, joka perustuu Hyper-Pipelining Query Execution -algoritmiin, joka mahdollistaa suuria arvojoukkoja käsitellä kerralla yhdessä toimenpiteessä.
Uuden julkaisun muutoksista:
- Työ tallennusmuodon parantamiseksi jatkui. Optimistinen levykirjoitustila on toteutettu, jossa ladattaessa suuri joukko tietoja yhdellä tapahtumalla, tiedot pakataan ja kirjoitetaan tiedostoon tietokannasta suoratoistotilassa odottamatta tapahtuman vahvistusta COMMIT-komennolla. . Kun COMMIT-komento vastaanotetaan, tiedot on jo kirjoitettu levylle, ja kun ROLLBACK suoritetaan, se hylätään. Aiemmin tiedot tallennettiin kokonaan muistiin, ja kun se oli sitonut, ne tallennettiin levylle.
- Lisätty tuki tietojen rinnakkaiselle lataamiselle erillisiin taulukoihin, mikä mahdollistaa merkittävästi lisäämisen latausnopeutta moniytimisissä järjestelmissä. Esimerkiksi edellisessä versiossa 150 miljoonan rivin tietokannan lataaminen 10-ytimiseen suorittimeen kesti 91 sekuntia, mutta uudessa versiossa tämä toiminto valmistuu 17 sekunnissa. On olemassa kaksi rinnakkaista lataustilaa - tietueiden järjestyksen säilyttämisellä ja ilman järjestyksen säilyttämistä.
- Tietojen pakkaamiseen käytetään FSST (Fast Static Symbol Table) -algoritmia, jonka avulla voit pakata tietoja merkkijonojen sisään käyttämällä yleistä tyypillisten osumien sanakirjaa. Uuden algoritmin käyttö mahdollisti testitietokannan koon pienentämisen 761 megatavusta 251 megatavuun.
- Simpanssi- ja Patas-algoritmeja on ehdotettu liukulukujen (DOUBLE ja FLOAT) pakkaamiseen. Edelliseen Gorillas-algoritmiin verrattuna Chimp tarjoaa korkeamman pakkaustason ja nopeamman purkamisen. Patas-algoritmi on jäljessä Chimpistä pakkaussuhteessa, mutta on paljon nopeampi purkunopeudessa, mikä ei juuri eroa pakkaamattoman datan lukemisesta.
- Lisätty kokeellinen kyky ladata tietoja CSV-tiedostoista useisiin rinnakkaisiin virtoihin (SET experimental_parallel_csv=true), mikä vähentää merkittävästi suurten CSV-tiedostojen lataamiseen kuluvaa aikaa. Esimerkiksi kun tämä asetus oli käytössä, 720 Mt:n CSV-tiedoston latausaika lyheni 3.5 sekunnista 0.6 sekuntiin.
- Mahdollisuus indeksin luonti- ja hallintatoimintojen rinnakkaiseen suorittamiseen on otettu käyttöön. Esimerkiksi 16 miljoonan tietueen sarakkeen CREATE INDEX -toiminto lyhennettiin 5.92 sekunnista 1.38 sekuntiin.
- Otettu käyttöön yhdistämistoimintojen rinnakkaistaminen kyselyissä, jotka sisältävät lausekkeen "COUNT(DISTINCT col)".
- SQL on lisännyt tuen UNION-tyypille, joka mahdollistaa useiden tyyppien sitomisen yhteen elementtiin (esimerkiksi "UNION(num INT, error VARCHAR)").
- SQL tarjoaa mahdollisuuden muodostaa kyselyitä, jotka alkavat sanalla "FROM" sanan "SELECT" sijaan. Tässä tapauksessa oletetaan, että kysely alkaa "SELECT *".
- SQL on lisännyt tuen COLUMNS-lausekkeelle, jonka avulla voit suorittaa toiminnon useille sarakkeille kopioimatta lauseketta. Esimerkiksi "VALITSE MIN(SARAKE(*)) havainnoista;" aiheuttaa MIN-funktion suorittamisen jokaiselle obs-taulukon sarakkeelle ja "SELECT COLUMNS('val[0-9]+') from obs;" sarakkeille, joiden nimi koostuu "val":sta ja numeroista.
- Lisätty tuki listatoimintoille, esimerkiksi "VALITSE [x + 1 x:lle in [1, 2, 3]] AS l;".
- Muistin kulutus on optimoitu. Oletusarvoisesti Linux-alusta käyttää jemalloc-kirjastoa muistin hallintaan. Merkittävästi parantunut hajautustoimintojen suorituskyky, kun muisti on rajallinen.
- Komentorivikäyttöliittymään lisätty ".mode duckbox" -tulostustila, joka hylkää keskimmäiset sarakkeet ottaen huomioon pääteikkunan leveyden (sopii nopeasti visuaalisesti arvioimaan kyselyiden tuloksia, joissa on suuri määrä sarakkeita, kuten "SELECT *". FROM tbl”, jotka normaalitilassa ovat hajallaan useille riveille). ".maxrows X" -parametrilla voit lisäksi rajoittaa näytettävien rivien määrää.
- CLI tarjoaa syötteiden automaattisen täydennyksen kontekstin huomioon ottaen (avainsanojen, taulukoiden nimien, funktioiden, sarakkeiden ja tiedostojen nimien syöttö on valmis).
- CLI:ssä on oletuksena käytössä kyselyn edistymisen ilmaisin.
Lähde: opennet.ru