DuckDB 2.0 se dirige vers une sortie à l'automne, et une version alpha est déjà disponible. MotherDuck a testé les fonctionnalités phares sur un seul ordinateur portable M5 et face à Amazon S3 pour mesurer ce qui change réellement pour les développeurs qui construisent des tables et des pipelines, plutôt que pour les ingénieurs qui écrivent la base de données elle-même.
Le verdict de ce test : DuckDB 2.0 est plus rapide, mais les gains dépendent fortement de la structure de vos données. Trois fonctionnalités expliquent l'essentiel de l'amélioration, et une seule d'entre elles ne nécessite aucune modification de vos requêtes.
Les E/S asynchrones rendent les lectures S3 2 à 3 fois plus rapides
La mise à niveau la plus simple est une couche d'E/S réécrite. Dans le benchmark, une requête lisant un fichier Parquet de 2,2 Go sur S3 — les votes Stack Overflow, 228 millions de lignes réparties en 2268 groupes de lignes — a été nettement accélérée sans qu'une seule ligne de SQL ne change.
Le mécanisme repose sur une séparation entre le travail réseau et le travail CPU. Dans les versions précédentes, chaque thread de travail téléchargeait un groupe de lignes, attendait, le décodait, puis téléchargeait le suivant, laissant les CPU inactifs pendant les transferts. Dans la 2.0, un pool de threads distinct se charge uniquement du téléchargement, maintenant des dizaines de groupes de lignes en vol, tandis que les threads de travail ne font que décoder.
Un seul paramètre contrôle ce comportement : read_ahead_depth, qui indique au pool de téléchargement combien de groupes de lignes récupérer à l'avance. Il est par défaut à -1, ce qui signifie automatique et dimensionné selon votre nombre de threads : la fonctionnalité est donc active dès l'installation. Le mettre à 0 rétablit l'ancien comportement.
MotherDuck signale une limite : les jeux de données découpés en milliers de petits fichiers Parquet de 1 Mo ne bénéficient d'aucun gain significatif, car le goulot d'étranglement réside dans les allers-retours par fichier que la lecture anticipée ne peut pas supprimer. Stocker un lac de données de cette façon reste une mauvaise pratique.



