DuckDB 0.6.0, variante SQLite pour les requêtes analytiques publiée

La version du SGBD DuckDB 0.6.0 est disponible, combinant des propriétés de SQLite telles que la compacité, la possibilité de se connecter sous la forme d'une bibliothèque intégrée, le stockage de la base de données dans un seul fichier et une interface CLI pratique, avec des outils et des optimisations pour l'exécution. des requêtes analytiques couvrant une partie importante des données stockées, qui agrègent par exemple l'intégralité du contenu de tables ou fusionnent plusieurs grandes tables. Le code du projet est distribué sous licence MIT. Le développement en est encore au stade de la formation de versions expérimentales, puisque le format de stockage n'est pas encore stabilisé et évolue de version en version.

DuckDB fournit un dialecte SQL avancé qui inclut des fonctionnalités supplémentaires pour gérer des requêtes très complexes et chronophages. L'utilisation de types complexes (tableaux, structures, unions) et la possibilité d'exécuter des sous-requêtes de corrélation arbitraires et imbriquées sont prises en charge. Il prend en charge l'exécution simultanée de plusieurs requêtes, en exécutant des requêtes directement à partir de fichiers CSV et Parquet. Il est possible d'importer depuis le SGBD PostgreSQL.

En plus du code shell de SQLite, le projet utilise un analyseur de PostgreSQL dans une bibliothèque distincte, le composant Date Math de MonetDB, sa propre implémentation de fonctions de fenêtre (basée sur l'algorithme Segment Tree Aggregation), un processeur d'expression régulière basé sur la bibliothèque RE2, son propre optimiseur de requêtes et un mécanisme de contrôle MVCC pour l'exécution simultanée de tâches (Multi-Version Concurrency Control), ainsi qu'un moteur d'exécution de requêtes vectorisées basé sur l'algorithme Hyper-Pipelining Query Execution, qui permet de grands ensembles de valeurs ​​à traiter en une seule opération.

Parmi les changements de la nouvelle version :

  • Les travaux se sont poursuivis pour améliorer le format de stockage. Un mode d'écriture de disque optimiste a été implémenté, dans lequel lors du chargement d'un grand ensemble de données en une seule transaction, les données sont compressées et écrites dans un fichier à partir de la base de données en mode streaming, sans attendre la confirmation de la transaction avec la commande COMMIT. . Lorsqu'une commande COMMIT est reçue, les données sont déjà écrites sur le disque et lorsqu'un ROLLBACK est exécuté, elles sont supprimées. Auparavant, les données étaient initialement entièrement enregistrées en mémoire et, une fois validées, elles étaient enregistrées sur le disque.
  • Ajout de la prise en charge du chargement parallèle des données dans des tables séparées, ce qui vous permet d'augmenter considérablement la vitesse de chargement sur les systèmes multicœurs. Par exemple, dans la version précédente, le chargement d'une base de données de 150 millions de lignes sur un processeur à 10 cœurs prenait 91 secondes, mais dans la nouvelle version, cette opération est effectuée en 17 secondes. Il existe deux modes de chargement parallèle : avec préservation de l'ordre des enregistrements et sans préservation de l'ordre.
  • Pour la compression des données, l'algorithme FSST (Fast Static Symbol Table) est utilisé, ce qui vous permet de regrouper les données dans des chaînes à l'aide d'un dictionnaire commun de correspondances typiques. L'utilisation du nouvel algorithme a permis de réduire la taille de la base de données de test de 761 Mo à 251 Mo.
  • Des algorithmes Chimp et Patas ont été proposés pour compresser les nombres à virgule flottante (DOUBLE et FLOAT). Par rapport au précédent algorithme Gorillas, Chimp offre des niveaux de compression plus élevés et une décompression plus rapide. L'algorithme Patas est en retard sur Chimp en termes de taux de compression, mais est beaucoup plus rapide en termes de vitesse de décompression, ce qui n'est presque pas différent de la lecture de données non compressées.
  • Ajout d'une possibilité expérimentale de charger des données à partir de fichiers CSV dans plusieurs flux parallèles (SET experimental_parallel_csv=true), ce qui réduit considérablement le temps nécessaire au chargement de gros fichiers CSV. Par exemple, lorsque cette option était activée, le temps de téléchargement d'un fichier CSV de 720 Mo était réduit de 3.5 à 0.6 seconde.
  • La possibilité d'exécution parallèle des opérations de création et de gestion d'index a été mise en œuvre. Par exemple, l'opération CREATE INDEX sur une colonne contenant 16 millions d'enregistrements a été réduite de 5.92 à 1.38 seconde.
  • Activation de la parallélisation des opérations d'agrégation dans les requêtes contenant l'expression « COUNT(DISTINCT col) ».
  • SQL a ajouté la prise en charge du type UNION, qui permet de lier plusieurs types à un seul élément (par exemple, « UNION(num INT, error VARCHAR)) »).
  • SQL offre la possibilité de former des requêtes commençant par le mot « FROM » au lieu de « SELECT ». Dans ce cas, on suppose que la requête commence par « SELECT * ».
  • SQL a ajouté la prise en charge de l'expression COLUMNS, qui vous permet d'effectuer une opération sur plusieurs colonnes sans dupliquer l'expression. Par exemple, « SELECT MIN(COLUMNS(*)) from obs ; » entraînera l'exécution de la fonction MIN pour chaque colonne de la table obs, et "SELECT COLUMNS('val[0-9]+') from obs;" pour les colonnes dont le nom est composé de "val" et de chiffres.
  • Ajout de la prise en charge des opérations sur les listes, par exemple « SELECT [x + 1 for x in [1, 2, 3]] AS l ; ».
  • La consommation de mémoire a été optimisée. Par défaut, la plateforme Linux utilise la bibliothèque jemalloc pour la gestion de la mémoire. Performances considérablement améliorées des opérations de fusion de hachage lorsque la mémoire est limitée.
  • Ajout du mode de sortie « .mode duckbox » à l'interface de ligne de commande, qui supprime les colonnes du milieu en tenant compte de la largeur de la fenêtre du terminal (adapté pour évaluer visuellement rapidement les résultats de requêtes avec un grand nombre de colonnes, telles que « SELECT * FROM tbl", qui en mode normal sont répartis sur plusieurs lignes). Grâce au paramètre « .maxrows X », vous pouvez en outre limiter le nombre de lignes affichées.
  • La CLI permet la saisie semi-automatique en tenant compte du contexte (la saisie des mots-clés, des noms de tables, des fonctions, des noms de colonnes et des noms de fichiers est terminée).
  • La CLI dispose d’un indicateur de progression des requêtes activé par défaut.

Source: opennet.ru

Ajouter un commentaire