Lëshohet versioni i DBMS DuckDB 1.2.0, i fokusuar në ekzekutimin e kërkesave analitike dhe konceptualisht i ngjashëm me SQLite. DuckDB bashkon veçoritë si kompaktësia, lidhja në formën e një biblioteke të integruar, ruajtja e databazës në një skedar të vetëm dhe ndërfaqja CLI, me mundësitë dhe optimizimet për ekzekutimin e kërkesave analitike që mbulojnë një pjesë të konsiderueshme të të dhënave të ruajtura, për shembull, duke kryer agregimin e të gjithë përmbajtjes së tabelave ose bashkimin e disa tabelave të mëdha. Kodi i projektit është shkruar në gjuhën C++ dhe shpërndahet nën licencën MIT.
DuckDB ofron njĂ« dialekt tĂ« zgjeruar tĂ« gjuhĂ«s SQL, i cili pĂ«rfshin mundĂ«si shtesĂ« pĂ«r pĂ«rpunimin e kĂ«rkesave shumĂ« komplekse dhe afatgjata. ĂshtĂ« e mundur tĂ« pĂ«rdoren tipe tĂ« komplikuara (array, struktura, bashkime), si dhe tĂ« ekzekutohen nĂ«nkĂ«rkesa tĂ« rastĂ«sishme dhe tĂ« ngulitura. MbĂ«shtetet ekzekutimi paralel i kĂ«rkesave tĂ« shumta, ekzekutimi i kĂ«rkesave drejtpĂ«rdrejt nga skedarĂ«t nĂ« formatet CSV dhe Parquet. MbĂ«shtetja e importit nga DBMS PostgreSQL Ă«shtĂ« gjithashtu e disponueshme.
Projekti përdor një shell nga SQLite, parser nga PostgreSQL, komponentin Date Math nga MonetDB, implementimin e tij të funksioneve dritare (baze në algoritmin e Segment Tree Aggregation), një përpunues regex-i të bazuar në bibliotekën RE2, optimizatorë të veçantë pyetjesh, mekanizmin MVCC për menaxhimin e konkurencës (Kontrolli i Konkurrencës me Versione të Shumta), si dhe një motor të vectorizuar për ekzekutimin e pyetjeve të bazuar në algoritmin Hyper-Pipelining Query Execution, që lejon përpunimin e grupeve të mëdha të vlerave në një operacion të vetëm.
Në këtë version të ri:
- ĂshtĂ« realizuar mbĂ«shtetje pĂ«r metodat e reja tĂ« kompresimit, tĂ« cilat nuk janĂ« tĂ« aktivizuara si parazgjedhje pĂ«r tĂ« ruajtur kompatibilitetin e skedarĂ«ve tĂ« DB me versionet e mĂ«parshme tĂ« DuckDB. PĂ«r tĂ« pĂ«rdorur formatin e pĂ«rmirĂ«suar tĂ« skedarĂ«ve DB, Ă«shtĂ« ofruar mundĂ«sia pĂ«r tĂ« lidhur DB me numrin e versionit â kur hapni skedarin duke pĂ«rdorur parametrin "STORAGE_VERSION", tani mund tĂ« pĂ«rcaktoni versionin minimal tĂ« mbĂ«shtetur tĂ« DB ("ATTACH 'file.db' (STORAGE_VERSION 'v1.2.0');"). PĂ«r tĂ« konvertuar formatin e ri nĂ« atĂ« tĂ« vjetĂ«r, mund tĂ« pĂ«rdorni komandĂ«n SQL COPY, pĂ«r shembull: ATTACH 'file1.db'; ATTACH 'converted_file.db' (STORAGE_VERSION 'v1.0.0'); COPY FROM DATABASE file1 TO converted_file;
- Shtohet mbështetje për komandën SQL "ALTER TABLE ⊠ADD PRIMARY KEY" për të shtuar një çelës primar në një tabelë ekzistuese.
- Eliminohet kufizimi qĂ« nuk lejonte rishqyrtimin e identifikuesve pĂ«r tĂ« cilĂ«t ka njĂ« indeks gjurmimi unik, nĂ«se kĂ«ta identifikues ishin fshirĂ« nĂ« transaksionin aktual. PĂ«r shembull, kodi SQL mĂ« poshtĂ« tani nuk sjell njĂ« gabim: CREATE TABLE students (id INTEGER PRIMARY KEY, name VARCHAR); INSERT INTO students VALUES (1, âJohn Doeâ); BEGIN; DELETE FROM students WHERE id = 1; INSERT INTO students VALUES (1, âJane Doeâ);
- Shtohet mbĂ«shtetje pĂ«r ngarkimin e skedarĂ«ve CSV nĂ« kodimet Latin-1 dhe UTF-16 (mĂ« parĂ« mbĂ«shtetej vetĂ«m kodimi UTF-8). FROM read_csv(âcities-latin-1.csvâ, encoding = âlatin-1â);
- Shtohet mbĂ«shtetje pĂ«r pĂ«rdorimin e ndarĂ«sve shumĂ«-bajt nĂ« skedarĂ«t CSV (deri nĂ« 4 byte), qĂ« lejon specifikimin e emoji si ndarĂ«s kolumnash. ađŠb hellođŠworld FROM read_csv(âexample.dsvâ, sep = âđŠâ);
- Nga e dhënë si standart, modaliteti i rreptë i analizës së skedarëve CSV («strict_mode = true») është aktiv, duke kontrolluar përputhshmërinë me specifikimin RFC 4180. Në modalitetin e rreptë lejohen vetëm një simbol për ndarjen e rreshtave, që do të shkaktojë një gabim kur përpiqeni të analizoni skedarë, ku ndarja e rreshtave përdor jo vetëm simbolin e rikthimit të rreshtit, por edhe simbolin e rikthimit të kartecit («\r\n»).
- Në parserin CSV është përdorur një algoritëm i ri për përcaktimin e rreshtit të ri, duke mbështetur ndarjen e operacioneve. Përdorimi i algoritmit të ri ka përshpejtuar analizimin e CSV-të rreth 15%.
- ĂshtĂ« hequr kufizimi mbi madhĂ«sinĂ« e rreshtit nĂ« skedarĂ«t CSV (mĂ« parĂ« rreshti nuk duhej tĂ« kalonte 8 MB).
- Kur eksportohet tĂ« dhĂ«nat nĂ« formatin Parquet Ă«shtĂ« realizuar mbĂ«shtetje pĂ«r hash-e (fjalorĂ«) dhe indekse tĂ« bazuara nĂ« filtrin Bloom. ĂshtĂ« realizuar njĂ« metodĂ« kompresimi DELTA_BINARY_PACKED, qĂ« lejon tĂ« reduktohet ndjeshĂ«m madhĂ«sia e skedarĂ«ve Parquet.
- Në ndërfaqen e linjës së komandave është shtuar një modalitet i sigurt, i aktivizuar me opsionin «-safe» ose komandën «.safe_mode». Në këtë modalitet, lejohet vetëm qasja në skedarin origjinal të DB, dhe një përpjekje për të hapur skedarë të tjerë do të rezultojë në një gabim.
- Në ndërfaqen e linjës së komandave, është përmirësuar plotësimi automatik i hyrjes. Kodi për plotësimin automatik është kthyer në përdorimin e PEG (Gramatika e Shprehjeve të Parse-imit).
- Kur ekzekutoni komandat në ndërfaqen e linjës së komandave, është realizuar një paraqitje e qartë e numrave të mëdhenj, për shembull, kur shfaqet numri 100000000, do të shtohet gjithashtu «(100 milionë)».
- Në SQL është shtuar mbështetje për një sintaksë ku emrat e shkurtuar të tabelave dhe shprehjeve mund të tregohen para vlerave në të cilat ato i referohen (në vend që të përdorin sintaksën «shprehje AS emër»): SELECT e1: some_long_and_winding_expression, e2: t2.a_column_name FROM t1: long_schema.some_long_table_name, t2: short_s.tbl;
- Në komandën «SELECT» është realizuar mbështetje për operacionin «RENAME» për rinaming-un e fushave që paraqiten kur thuhet shprehja «*»: SELECT * RENAME (col1 AS new_col1) FROM integers;
- Në ekipin "SELECT" lejohet përdorimi i operacioneve "LIKE" dhe "SIMILAR TO" gjatë daljes përmes "*" : SELECT * LIKE 'val%' FROM key_val;
- Cilësia e gjenerimit të numrave pseudo-rasor është përmirësuar.
- Optimizuesi i kërkesave është modernizuar. Performanca gjatë testit TPC-H SF100 është rritur me 13%.
- Një API e re e ngjashme me C është propozuar për zhvillimin e shtesave, e cila mund të përdoret, për shembull, për krijimin e funksioneve të reja agreguese ose tabulare.
- Mbështetje është shtuar për sistemet me bibliotekën standarde C Musl.
Burimi: opennet.ru
