DuckDB, une base de données SQL intégrable comme SQLite, supporte les fonctionnalités de PostgreSQL
conçu pour le traitement et le stockage d’ensembles de données tabulaires

Selon sa documentation, DuckDB est un SGBD (système de gestion de base de données) OLAP (Online Analytical Processing) SQL intégrable. Il est semblable à SQLite, et en plus de cela, il prend également en charge les fonctionnalités de PostgreSQL, un système de gestion de base de données relationnelle et objet. DuckDB est conçu pour le traitement et le stockage d’ensembles de données tabulaires, le transfert d'un ensemble de résultats importants au client, l’analyse interactive des données, les modifications importantes et simultanées de plusieurs grands tableaux, etc.

Des requêtes analytiques rapides

Alors, pourquoi DuckDB ? Selon l’équipe de développement, il y a de nombreux systèmes de gestion de bases de données, mais il n’existe pas de système de base de données unique. Chacun d’eux fait des compromis différents pour mieux s'adapter à des cas d'utilisation spécifiques. DuckDB n'est pas tout à fait différent. C’est un SGBD relationnel (orienté table) qui prend en charge le langage SQL (Structured Query Languag). Il est conçu pour supporter les charges de travail liées aux requêtes analytiques, aussi connues sous le nom de traitement analytique en ligne (OLAP).

Elles sont caractérisées par des requêtes complexes, relativement longues, qui traitent des parties importantes de l'ensemble de données stockées, par exemple des agrégations sur des tables entières ou des jointures entre plusieurs grandes tables. De plus, les modifications apportées aux données devraient aussi être assez importantes, plusieurs lignes étant ajoutées ou de grandes parties de tableaux étant modifiées ou ajoutées simultanément. Pour supporter ces charges de travail, il est essentiel de réduire le nombre de cycles de CPU qui sont dépensés par valeur individuelle.

Pour cela, les techniques de pointe en matière de gestion des données sont soit des moteurs d'exécution de requêtes sous forme vectorisées, soit des moteurs d'exécution de requêtes en flux tendu. DuckDB contient un moteur d'exécution de requêtes vectorisées en colonnes, où les requêtes sont toujours interprétées, mais où un grand lot de valeurs provenant d'un seul est traité en une seule opération. Cela réduit considérablement la surcharge des systèmes traditionnels tels que PostgreSQL, MySQL ou SQLite qui traitent chaque ligne de manière séquentielle. L'exécution de requêtes vectorisées permet d'obtenir de bien meilleures performances dans le cas des requêtes OLAP.

Un fonctionnement simple

SQLite est le SGBD le plus largement déployé dans le monde. Sa simplicité d'installation et son fonctionnement intégré dans les processus sont des facteurs clés de son succès. D’après l’équipe, DuckDB adopte ces idées de simplicité et de fonctionnement intégré. De cette manière, DuckDB n'a pas de dépendances externes, ni pour la compilation ni lors de l'exécution. Elle estime que toute l'arborescence des sources de DuckDB est compilée en deux fichiers seulement, un en-tête et un fichier d'implémentation, une “amalgamation”, ce qui simplifie grandement beaucoup de choses.

Cela comprend le déploiement et l'intégration dans d'autres processus de compilation. En ce qui concerne la construction, tout ce qui est nécessaire pour construire DuckDB est un compilateur C++ 11 fonctionnel. Il n'y a pas de logiciel serveur de SGBD à installer, mettre à jour et maintenir. DuckDB ne fonctionne pas comme un processus séparé, mais il est complètement intégré dans un processus hôte. Dans certains cas, DuckDB peut traiter des données étrangères sans les copier. Par exemple, le paquet Python de DuckDB peut exécuter des requêtes directement sur des données Pandas sans jamais importer ou copier de données.

Licence libre et open source

Selon son site officiel, les principaux développeurs de DuckDB sont des fonctionnaires néerlandais. C'est pour cette raison que DuckDB est publié sous la licence très permissive du MIT. DuckDB est open source et l'ensemble du code source de DuckDB est disponible gratuitement sur GitHub.

Riche en fonctionnalités

Selon l’équipe, DuckDB offre de sérieuses fonctionnalités de gestion des données. Il offre une prise en charge étendue des requêtes complexes en SQL avec une vaste bibliothèque de fonctions, des fonctions de fenêtres, etc. DuckDB offre des garanties transactionnelles (propriétés ACID) grâce à un contrôle de simultanéité multiversion (MVCC) personnalisé et optimisé. Les données peuvent être stockées dans des bases de données persistantes à fichier unique. Il prend également en charge des index secondaires pour accélérer les requêtes visant à trouver une seule entrée de table.

Enfin, DuckDB est bien intégré à Python et R pour une analyse interactive efficace des données. DuckDB fournit des API pour Java, C, C++ et autres. Bien que DuckDB soit créé par un groupe de recherche, il n'est pas destiné à être un prototype de recherche. DuckDB est conçu comme un système de base de données stable et mature. L’équipe explique que pour faciliter cette stabilité, DuckDB est intensivement testé en utilisant l'intégration continue. La suite de tests de DuckDB contient des millions de requêtes, dont des requêtes adaptées des tests de SQLite, PostgreSQL et MonetDB.

Les tests sont répétés sur plusieurs plateformes et compilateurs. Chaque demande d’extraction est vérifiée par rapport à la configuration complète du test et n'est fusionnée que si elle réussit. En plus de cette suite de tests, l’équipe effectue aussi divers tests qui mettent en évidence la capacité de DuckDB à supporter de lourdes charges, y compris les tests de référence TPC-H et TPC-DS, ainsi que divers tests où DuckDB est utilisé par de nombreux clients en parallèle.

SQLite vs DuckDB

Selon des utilisateurs ayant essayé SQLite et DuckDB, leur utilisation est très similaire, ce qui signifie que DuckDB offre également le confort d'une base de données facilement intégrable. D’après eux, les performances sont toujours 5 à 10 fois plus rapides que celles d'une requête comparable dans SQLite. Toutefois, ils ne sont pas prêts à affirmer de façon audacieuse que “DuckDB est 10 fois plus rapide que SQLite”. Cela en raison du fait que la comparaison des performances qu’ils ont faite a juste cherché à savoir : « à quelle vitesse est le prototype de SQL ? »

Toujours d’après eux, dans l'ensemble, les améliorations de performances introduites par DuckDB sont très agréables et ils s’attendent à ce qu’il devienne encore plus rapide dans les versions futures. En conclusion, ils estiment que tout le monde dans le domaine de l’analyse de données devrait absolument le garder à l'horizon et l'utiliser quand il veut travailler localement tout en exécutant un SQL analytique.

Sources : DuckDB, Page GitHub de DuckDB

Et vous ?

Qu'en pensez-vous ?

Voir aussi

SQLite 3.33.0 est disponible avec la prise en charge de « UPDATE FROM » suivant la syntaxe de PostgreSQL, améliore l'extension ieee754 pour la prise en charge des numéros binary64 de l'IEEE 754

PostgreSQL 12 est disponible et apporte des améliorations sur la performance des requêtes, cette version introduit les « colonnes calculées » et supporte les colonnes générées stockées

Une base de données de 22 Go contenant 56 millions de données personnelles sur des personnes vivant aux États-Unis a été exposée en ligne sur un serveur exploitant une adresse IP chinoise

Oracle ouvre cinq centres de données dans cinq pays pour renforcer son offre en matière de Cloud computing et dévoile certains détails de son plan d'expansion pour 2020

DataGrip 2020.1, l'EDI destiné aux administrateurs de base de données et aux développeurs travaillant avec des bases de données SQL, apporte de nombreuses améliorations