De uitgave van de DuckDB-database 1.4.0 is gepubliceerd, gericht op het uitvoeren van analytische queries en conceptueel vergelijkbaar met SQLite. DuckDB combineert eigenschappen van SQLite, zoals compactheid, ingebedde bibliotheekverbinding, opslag van de database in één bestand en een CLI-interface, met mogelijkheden en optimalisaties voor het uitvoeren van analytische queries die een aanzienlijk deel van de opgeslagen gegevens bestrijken, bijvoorbeeld het uitvoeren van aggregaties van de volledige inhoud van tabellen of het samenvoegen van meerdere grote tabellen. De code van het project is geschreven in C++ en wordt verspreid onder de MIT-licentie.
DuckDB biedt een uitgebreide SQL-dialect, inclusief extra mogelijkheden voor het verwerken van zeer complexe en langdurige queries. Het is mogelijk om complexe types (arrays, structuren, unions) te gebruiken, evenals het uitvoeren van willekeurige en geneste correlerende subqueries. Gelijktijdige uitvoering van meerdere queries wordt ondersteund, evenals het direct uitvoeren van queries vanuit bestanden in CSV- en Parquet-formaten. Ondersteuning voor import vanuit PostgreSQL-databases is beschikbaar.
Het project maakt gebruik van een shell van SQLite, een parser van PostgreSQL, een Date Math-component van MonetDB, een eigen implementatie van venstervariabelen (gebaseerd op het Segment Tree Aggregation-algoritme), een reguliere expressie-verwerker op basis van de RE2-bibliotheek, een eigen query-optimalisator, een MVCC-mechanisme voor het beheer van gelijktijdige taakuitvoering (Multi-Version Concurrency Control), en ook een gevectoriseerde query-uitvoeringsengine op basis van het Hyper-Pipelining Query Execution-algoritme, waarmee grote sets waarden in één operatie tegelijk kunnen worden verwerkt.
In de nieuwe versie:
- Ondersteuning voor de opslag van databasebestanden in versleutelde vorm is toegevoegd. Voor de versleuteling wordt het AES-256-algoritme in GCM-modus gebruikt. Niet alleen het hoofd bestand met gegevens wordt versleuteld, maar ook WAL-logs en tijdelijke bestanden. De sleutels voor databaseversleuteling worden ingesteld met het ATTACH-commando via de ENCRYPTION_KEY-parameter. ATTACH ‘encrypted.db’ AS enc_db (ENCRYPTION_KEY ‘quack_quack’);
- Ondersteuning voor het commando ‘MERGE INTO’ is toegevoegd, dat kan worden toegepast als alternatief voor de uitdrukking ‘INSERT … ON CONFLICT’, zonder dat een primaire sleutel vereist is en werkend met willekeurige samenvoegvoorwaarden. Het commando ‘MERGE INTO’ stelt gebruikers in staat om conditionele SQL-uitdrukkingen te maken die de INSERT-, UPDATE- en DELETE-operaties in één uitdrukking combineren. Bijvoorbeeld, met MERGE kan het samenvoegen van twee tabellen worden georganiseerd door ontbrekende records in te voegen en bestaande records bij te werken. WITH deletes(item_id, delete_threshold) AS (VALUES (10, 3000)) MERGE INTO Stock USING deletes USING (item_id) WHEN MATCHED AND balance < delete_threshold THEN DELETE RETURNING merge_action, *;
- Daarnaast is ondersteuning voor schrijfoperaties aan tabellen in Apache Iceberg-formaat toegevoegd (voorheen werd alleen lezen ondersteund), wat het mogelijk maakt om gegevens van Iceberg naar DuckDB en vice versa over te dragen.
- In de opdrachtregel cliënt is een voortgangsindicator toegevoegd voor de uitvoering van de bewerking met een voorspelling van de tijd die nodig is om te voltooien.
- De vensterfunctie 'FILL' is toegevoegd, die kan worden gebruikt voor het interpoleren van ontbrekende waarden in gesorteerde vensters. FROM (VALUES (1, 1), (2, NULL), (3, 42)) t(c1, c2) SELECT fill(c2) OVER (ORDER BY c1) f; 1 21 42
- De Teradata Connector uitbreiding is geïmplementeerd voor de verbinding met Teradata-databases. De uitbreiding maakt het mogelijk om tabellen te manipuleren, queries uit te voeren en SQL-commando's rechtstreeks in Teradata te starten met behulp van DuckDB.
- Ondersteuning voor het vastleggen van de toestand (checkpoint) van tabellen die in het geheugen zijn opgeslagen is toegevoegd, wat de implementatie van compressie mogelijk maakt. Bovendien wordt bij het vastleggen van de toestand een opruiming van verwijderde rijen uitgevoerd en wordt er ruimte vrijgemaakt na verwijdering.
- Er zijn verschillende prestatieoptimalisaties voorgesteld: De implementatie van sorteren is overgeschakeld naar het gebruik van het k-way merge sort algoritme, waardoor het verplaatsen van gegevens wordt verminderd. Gemeenschappelijke tabeluitdrukkingen (Common Table Expression, CTE) worden nu standaard gematerialiseerd.
Bron: opennet.ru
