programmatūra · 6 min · 18.08.2026

DuckDB 2.0 atver tīkla portu: rekursīvais vaicājums no 4,90 līdz 0,12 sekundēm

DuckDB komanda 17. augustā publicēja 2.0 versijas priekšskatījumu. Datubāze, kas līdz šim strādāja tikai kā bibliotēka iekšā tavā procesā, tagad prot atvērt tīkla savienojumu un apkalpot citus klientus. Laidiena kodnosaukums ir “Cyanoptera”. Pirmās būves var lejupielādēt jau tagad, stabilā versija paredzēta rudenī.

Kopš 1.5 laidiena martā projektā ieskaitīti vairāk nekā 10 000 iesūtījumu. Līdzi nāk jauns SQL parsētājs, jauns noklusētais krātuves formāts, pārstrādāta C saskarne un neliels skaits apzinātu nesaderību ar veco kodu.

vaicājums aiziet pa HTTP

Jaunais CONNECT paziņojums ļauj vienam DuckDB procesam pieslēgties citam. Zem tā strādā Quack protokols, kas 2.0 versijā izaug no beta stadijas. Protokols balstās uz HTTP, tāpēc tam pietiek ar infrastruktūru, kas komandai jau ir: slodzes sadalītājiem un ugunsmūriem. DuckCon #7 pārskatā šī pāreja aprakstīta kā galvenā 2.0 tēma.

Otrs jaunums ir attālinātā vaicājumu nodošana. Ja DuckDB pieslēgts PostgreSQL vai MySQL, filtrus un projekcijas tas tagad izpilda attālajā serverī, nevis pārvelk visas rindas pie sevis. Lielai tabulai tas ir starpība starp dažiem simtiem kilobaitu un vairākiem gigabaitiem pa tīklu.

Autentifikāciju sedz kopienas paplašinājums quack-oauth, ko uztur DataZooDE. Tas pievieno OAuth 2.1 un OIDC slāni ar JWT pārbaudi, ar tiesībām, kas nolasāmas no marķiera laukiem.

Praktiskā atšķirība ir vienkārša. Līdz šim DuckDB fails dzīvoja vienā mašīnā un ar to strādāja viens process. Tagad to pašu failu var atvērt serverī un tam pieslēgties no piezīmjdatora, no CI darba vai no BI rīka. Katram lietotājam vairs nav vajadzīga sava failu kopija. SQLite tādu soli nekad nav spēris. Šeit DuckDB sāk skart teritoriju, kur līdz šim sēdēja ClickHouse un Postgres analītiskās kopijas.

trigeri un jaunas SQL konstrukcijas

2.0 ienes pilnu trigeru atbalstu: BEFORE un AFTER, rindas un paziņojuma līmenī, ar pārejas tabulām un vairākiem trigeriem uz vienu notikumu. Audita žurnālu vai datu pārbaudi tagad var uzrakstīt datubāzē, bez papildu koda lietotnes pusē.

SQL dialekts papildināts vairākos virzienos:

  • NEAREST savienojumi tuvāko vērtību meklēšanai
  • DML operācijas CTE iekšienē
  • ligzdotas shēmas
  • mainīgie ar $x sintaksi
  • JSON mutācijas funkcijas un rekursīvi CTE ar agregāciju

VARIANT tips pusstrukturētiem datiem tagad lasa vērtības sadalītā veidā tieši no krātuves un nolaiž lauku izvilkšanu līdz skenēšanas līmenim. Parquet failiem tas strādā gan lasīšanā, gan rakstīšanā. Klāt nākušas variant_* funkcijas, ar kurām pie ligzdotiem laukiem var tikt bez iepriekšējas shēmas.

rekursīvais vaicājums: no 4,90 līdz 0,12 sekundēm

Rekursīvo CTE dzinis pārrakstīts no nulles. DuckDB etalonā ar vienu miljonu grafa šķautņu vaicājums par sasniedzamību no viena avota 1.5.4 versijā izpildījās 4,90 sekundēs. 2.0 versijā tas pats vaicājums aizņem 0,12 sekundes, aptuveni 40 reizes mazāk.

Otrs ātruma avots ir asinhronā ievadizvade. Parquet, CSV un DuckDB paša formātam lasīšana tagad iet neatkarīgi no vaicājuma apstrādes. Ieguvums lielākais tīkla krātuvē, kur katrs pieprasījums maksā desmitiem milisekunžu un dzinis līdz šim vienkārši gaidīja.

Rindu grupu izmešana pirms lasīšanas sākusi strādāt arī ar struktūrām, sarakstiem, UUID vērtībām, IN filtriem un funkciju predikātiem. Plānotājs ņem vērā arī datu sadalījumu pa nodalījumiem, kas noder ezerbāzes formātiem.

ICU ārā, laika joslas 45 kilobaitos

DuckDB pilnībā izņēmis ICU bibliotēku. Laika joslas un kārtošanas kārtību tagad apstrādā pašu rakstīts kods, IANA laika joslu datubāze saspiesta aptuveni 45 kilobaitos. 25 miljonu laika zīmogu pārrēķins uz citu joslu iet 2,2 reizes ātrāk. Filtrs pēc vācu kārtošanas kārtības uz 5 miljoniem rindu iet 2,6 reizes ātrāk.

Bibliotēkas izmešana nozīmē arī mazāku bināro failu un vienu atkarību mazāk tiem, kas DuckDB kompilē paši.

jauns parsētājs un krātuves formāts

Vecais parsētājs bija pārmantots no PostgreSQL koda. 2.0 to aizstāj ar paša rakstītu risinājumu, kas balstās uz PEG gramatiku. Projekta emuārā tas formulēts īsi:

DuckDB 2.0 nāk ar mūsu pašu modernu, paplašināmu parsētāju, kas balstīts uz PEG.

Uz jaunā parsētāja uzbūvēti dialektu saderības režīmi. Pirmais no tiem ir Spark: ar ieslēgtu režīmu DuckDB pieņem Spark SQL sintaksi, tāpēc esošos vaicājumus nav jāpārraksta.

Krātuves formāts pārnumurēts uz 2.0. ART indeksi vairs neturas atmiņā pilnībā, tos pārvalda bufera pārvaldnieks. Kolonnu metadatus dzinis lasa pēc pieprasījuma. Virknes pēc noklusējuma saspiež DICT_FSST algoritms, dzēstās rindas glabājas kompaktāk.

Paplašinājumu autoriem stabilā C saskarne tagad tiek ģenerēta no versionētām YAML specifikācijām. Uzņēmumi var turēt savas paplašinājumu krātuves un parakstīt saturu kriptogrāfiski, klienta pusē piesienot publisko atslēgu.

ko darīt ar veco datubāzi

Jaunināšana nebūs bez darba. Papildus jaunajam noklusētajam krātuves formātam laidiens noslēdz pāreju uz jauno lambda sintaksi. Pilnu nesaderību sarakstu izstrādātāji solījuši publicēt kopā ar oficiālo paziņojumu rudenī.

Tiem, kas gaidīs stabilo versiju, pašlaik uzturamie laidieni ir 1.5.4 “Variegata” un 1.4.5 LTS “Andium”, abi izdoti 17. jūnijā.

Avoti

komentārisaruna

Komentāri

Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.

Pievieno komentāru

Tavs e-pasts netiks publicēts. Obligātie lauki atzīmēti.

vēl no programmatūrasaistītie