On release is the DBMS DuckDB 0.6.0, which combines properties such as compactness, the ability to connect as an embedded library, storage of the database in a single file, and a convenient CLI interface of SQLite, with tools and optimizations for performing analytical queries covering a significant part of stored data, such as aggregating all content of tables or merging several large tables. The project code is distributed under the MIT license. Development is still at the stage of forming experimental releases, as the storage format has not yet stabilized and changes from version to version.
DuckDB pakub laiendatud SQL-i dialekti, mis sisaldab lisafunktsioone vĂ€ga keeruliste ja pikaajaliste pĂ€ringute töötlemiseks. Toetatakse keeruliste tĂŒĂŒpide (massiiivid, struktuurid, ĂŒhendused) kasutamist ning vĂ”imalust teostada omapĂ€raseid ja sisemisi korreleerivaid alam-pĂ€ringuid. Samuti toetab see mitme pĂ€ringu samaaegset tĂ€itmist ja pĂ€ringute otsest tĂ€itmist CSV- ja Parquet-failidest. On vĂ”imalik importida andmeid PostgreSQL andmebaasist.
Lisaks SQLite shell-koodile kasutab projekt PostgreSQL-st eraldi vĂ€lja tĂ”stetud parserit, MonetDB Date Math komponenti, oma realiseeringut aknafunktsioonidest (Segment Tree Aggregation algoritmi pĂ”hjal), regulaaravaldiste töötlemise vahendit, mis pĂ”hineb RE2 raamatukogul, oma pĂ€ringute optimeerijat, MVCC mehhanismi (Multi-Version Concurrency Control) ĂŒheaegsete ĂŒlesannete haldamiseks ning vektorkiidustatud pĂ€ringute tĂ€itmise mootorit Hyper-Pipelining Query Execution algoritmi pĂ”hjal, mis vĂ”imaldab ĂŒhes operatsioonis korraga töödelda suurtes kogustes vÀÀrtusi.
Among the changes in the new release:
- Work on improving the storage format has continued. An optimistic mode of writing to disk has been implemented, in which during the loading of a large dataset in a single transaction, the data is compressed and streamed directly into the database file without waiting for the completion of the transaction confirmation with the COMMIT command. At the time the COMMIT command is issued, the data has already been written to the disk, and in the event of a ROLLBACK, it is discarded. Previously, data was fully preserved in memory first and saved to disk upon commit.
- Support for parallel loading of data into separate tables has been added, significantly increasing loading speed on multi-core systems. For example, in the previous release, loading a database with 150 million rows on a 10-core CPU took 91 seconds, while in the new version this operation is performed in 17 seconds. Two modes of parallel loading are provided - preserving the order of records and non-order-preserving.
- The FSST (Fast Static Symbol Table) algorithm has been employed for data compression, allowing for packing data within strings using a common dictionary of typical matches. The application of the new algorithm has reduced the size of the test database from 761MB to 251MB.
- For compressing floating-point numbers (DOUBLE and FLOAT), Chimp and Patas algorithms have been proposed. Compared to the previously used Gorillas algorithm, Chimp provides a higher level of compression and faster unpacking. The Patas algorithm lags behind Chimp in terms of compression degree but is significantly faster in unpacking speed, nearly indistinguishable from reading uncompressed data.
- Lisatud katseversioon CSV-failidest andmete laadimise vĂ”imalus mitme paralleelse vooga (SET experimental_parallel_csv=true), mis vĂ€hendab oluliselt suurte CSV-failide laadimisaega. NĂ€iteks, kui valik on lubatud, lĂŒhenes 720 MB CSV-faili laadimise aeg 3,5 sekundilt 0,6 sekundile.
- Teostatud indeksi loomise ja haldamise toimingute paralleelne tĂ€itmine. NĂ€iteks lĂŒhenes CREATE INDEX toimingu teostamine 16 miljoni kirje puhul 5,92 sekundilt 1,38 sekundile.
- Tagatud on operatsioonide paralleelne teostamine, mis sisaldavad pÀringutes vÀljendit "COUNT(DISTINCT col)".
- SQL-i on lisatud UNION tĂŒĂŒbi tugi, mis vĂ”imaldab siduda ĂŒhe elemendi mitme tĂŒĂŒbiga (nĂ€iteks, "UNION(num INT, error VARCHAR)").
- SQL-is on antud vÔimalus luua pÀringud, mis algavad sÔnaga "FROM" selle asemel, et "SELECT". Sel juhul eeldatakse, et pÀring algab "SELECT *".
- SQL-is on lisatud vĂ€ljendi "COLUMNS" tugi, mis vĂ”imaldab teostada toimingut mitme veeru ĂŒle vĂ€ljendi dubleerimata. NĂ€iteks, "SELECT MIN(COLUMNS(*)) from obs;" viib MIN-funktsiooni teostamiseni iga veeru jaoks tabelis obs, ja "SELECT COLUMNS('val[0-9]+') from obs;" veergude puhul, mille nimed koosnevad "val"-st ja numbritest.
- Lisatud tugi loendite operatsioonideks, nÀiteks "SELECT [x + 1 for x in [1, 2, 3]] AS l;".
- Viidatud on mĂ€lu tarbimise optimeerimine. Vaikimisi on Linuxi platvormil mĂ€lu haldamiseks kasutusel jemalloc teek. Ăhendamise hÀÀlingute sooritus on oluliselt paranenud piiratud mĂ€lu suurusega.
- KĂ€surealiideses on lisatud vĂ€ljundireĆŸiim " .mode duckbox", mis eemaldab keskmised veerud arvesse vĂ”ttes terminali akna laius (sobib kiiresti tulemuste hindamiseks suurte veerude arvuga pĂ€ringute puhul, nagu "SELECT * FROM tbl", mis tavalisel reĆŸiimil jaotuvad mitmele reale). Parameetri " .maxrows X " abil on vĂ”imalik ka vĂ€ljundiretseid arvu piirata.
- CLI-s on tagatud sisestuse automaatne tÀiendamine konteksti arvesse vÔttes (tÀidetakse vÔtmesÔnade, tabelinimede, funktsioonide, veernimede ja failinimede sisestamine).
- CLI-s on vaikimisi sisse lĂŒlitatud pĂ€ringu tĂ€itmise edenemise nĂ€idiku kuvamine.
Allikas: opennet.ru
