Présentation de DuckDB

DuckDB est une plateforme de traitement de données en mémoire qui offre des outils de traitement de données puissants pour les ordinateurs portables. Initialement, la plateforme tech.ml.dataset (TMD) était utilisée pour le traitement de données, mais elle présentait des limites lorsqu'il s'agissait de traiter de grandes quantités de données. Les développeurs ont donc cherché une solution pour intégrer les avantages de la programmation fonctionnelle et du traitement de données en colonne avec les capacités de stockage relationnel.

Fonctionnement de DuckDB

DuckDB utilise une interface C pour fournir un système batché pour les inserts et les requêtes, ce qui permet de traiter de grandes quantités de données. La version actuelle de DuckDB prend en charge le traitement de requêtes relationnelles rapides et la persistence des données sur disque. Les développeurs ont créé une bibliothèque Clojure appelée tmducken pour intégrer DuckDB avec TMD.

Exemple d'utilisation

Un exemple d'utilisation de DuckDB consiste à charger un fichier CSV de 50 Go contenant 400 millions de lignes de transactions. Le fichier est chargé en 1 minute et 50 secondes, et la base de données résultante occupe 18 Go d'espace disque. Les développeurs peuvent ensuite interroger la base de données à l'aide de requêtes SQL pour obtenir des informations sur les transactions.

$ time duckdb data.ddb 'CREATE TABLE data AS FROM "data.csv";'

Les résultats de la requête sont affichés sous forme de tableau, avec les informations sur les transactions, telles que le nombre de transactions, les dates, les marques, les styles, les SKUs, les quantités et les prix.

Intégration avec Clojure

La bibliothèque tmducken permet d'accéder à DuckDB à partir de Clojure. Les développeurs peuvent charger la base de données, exécuter des requêtes SQL et récupérer les résultats sous forme de dataset Clojure. L'exemple montre comment charger la base de données, créer une table pour les couleurs des SKUs et insérer des données dans la table.

(duckdb/initialize!)
(def db (duckdb/open-db "data.ddb"))
(def conn (duckdb/connect db))

Les développeurs peuvent ensuite exécuter des requêtes SQL pour obtenir des informations sur les transactions et les couleurs des SKUs. L'exemple montre comment joindre les tables de transactions et de couleurs pour obtenir le nombre d'items de chaque couleur vendus en mars 2021.

(time (duckdb/sql->dataset conn "SELECT COUNT(*) FROM data INNER JOIN colors ON data.sku = colors.sku;"))

Les résultats de la requête sont affichés sous forme de tableau, avec le nombre d'items de chaque couleur vendus en mars 2021.