DuckDB 2.0 komt dit najaar beschikbaar. De eerste alpha-versie bevat verbeteringen die vooral merkbaar zijn bij data die op AWS S3 staat en bij queries op diepe hiërarchieën, zoals gitgeschiedenis, datalineage en stuklijsten.
De gemeten prestaties komen uit tests op één M5-laptop en een thuisverbinding. De resultaten zijn daarom niet zonder meer representatief voor elke omgeving. De nieuwe functies staan volgens de test standaard ingeschakeld.
Asynchrone invoer maakt S3-queries sneller
De grootste winst komt van asynchrone invoer. DuckDB 2.0 gebruikt aparte threads om gegevens alvast van S3 te downloaden, terwijl andere threads de binnengekomen data verwerken. In de vorige versie wisselden dezelfde werkers steeds tussen downloaden en rekenen, waardoor netwerk en processor elkaar vaker moesten afwachten.
Een query op een Parquet-bestand van 2,2 GB, met 228 miljoen rijen, duurde in DuckDB 1.5.5 18,8 seconden. De alpha-versie van DuckDB 2.0 had daarvoor 7,7 seconden nodig. Bij 23 grote Parquet-bestanden daalde de tijd van 11,8 naar 3,9 seconden. Een CSV-bestand van 1,7 GB werd verwerkt in 55 seconden, tegenover 116 seconden in de vorige versie.
Bij dertig kleine Parquet-bestanden was het verschil beperkt: 3,7 seconden tegenover 3,3 seconden. Daar komt de meeste tijd door afzonderlijke netwerkverbindingen per bestand. De instelling read_ahead_depth bepaalt hoeveel groepen vooruit worden gedownload. De standaardwaarde -1 schakelt de nieuwe werkwijze automatisch in; met 0 kan het oude gedrag worden teruggezet.
Snellere recursieve queries
Ook de verwerking van recursieve CTE’s is aangepast. In DuckDB 1.5.5 werd bij iedere stap de volledige tabel opnieuw gelezen. DuckDB 2.0 leest de tabel eenmaal en bouwt daarna een zoekstructuur op voor de ouderkolom.
In een test met een keten van 20.000 commits duurde het terugzoeken naar de oorsprong in DuckDB 1.5.5 tussen 1,8 en 16 seconden. DuckDB 2.0 deed daar iedere keer 0,10 seconde over. Bij ondiepe structuren, zoals een gewone organisatiestructuur, zal de winst kleiner zijn.
Daarnaast krijgt het nieuwe datatype VARIANT een rol bij het opslaan van JSON. Veelvoorkomende velden met een vast datatype kunnen daarbij intern als afzonderlijke kolommen worden opgeslagen. Daardoor kan DuckDB consistente delen van JSON efficiënter doorzoeken en opslaan, terwijl afwijkende velden in een reststructuur blijven staan.



