Publication de DuckDB 0.6.0, une variante de SQLite pour les requĂȘtes analytiques

La version 0.6.0 de la base de donnĂ©es DuckDB est maintenant disponible, combinant des caractĂ©ristiques de SQLite, telles que la compacitĂ©, la possibilitĂ© d’intĂ©gration sous forme de bibliothĂšque embarquĂ©e, le stockage de la base de donnĂ©es dans un seul fichier et une interface en ligne de commande conviviale, avec des outils et des optimisations pour exĂ©cuter des requĂȘtes analytiques sur une part significative des donnĂ©es stockĂ©es, par exemple, en effectuant l'agrĂ©gation de tout le contenu des tableaux ou en fusionnant plusieurs grands tableaux. Le code du projet est distribuĂ© sous la licence MIT. Le dĂ©veloppement est encore au stade de formation de versions expĂ©rimentales, car le format de stockage n'est pas encore stabilisĂ© et change d'une version Ă  l'autre.

DuckDB propose un dialecte SQL Ă©tendu, incluant des fonctionnalitĂ©s supplĂ©mentaires pour traiter des requĂȘtes trĂšs complexes et de longue durĂ©e. L'utilisation de types complexes (tableaux, structures, unions) est supportĂ©e, ainsi que la possibilitĂ© d'exĂ©cuter des sous-requĂȘtes corrĂ©lĂ©es arbitraires et imbriquĂ©es. L'exĂ©cution simultanĂ©e de plusieurs requĂȘtes est prise en charge, ainsi que l'exĂ©cution de requĂȘtes directement Ă  partir de fichiers au format CSV et Parquet. Il est possible d'importer des donnĂ©es depuis la base de donnĂ©es PostgreSQL.

En plus du code Shell provenant de SQLite, le projet utilise un parseur extrait de PostgreSQL, le composant Date Math de MonetDB, sa propre implĂ©mentation de fonctions de fenĂȘtre (basĂ©e sur l'algorithme Segment Tree Aggregation), un gestionnaire d'expressions rĂ©guliĂšres basĂ© sur la bibliothĂšque RE2, son propre optimiseur de requĂȘtes, un mĂ©canisme de contrĂŽle de concurrence multi-version (Multi-Version Concurrency Control), ainsi qu'un moteur d'exĂ©cution de requĂȘtes vectorisĂ© basĂ© sur l'algorithme Hyper-Pipelining Query Execution, permettant de traiter de grands ensembles de valeurs en une seule opĂ©ration.

Parmi les changements de la nouvelle version :

  • Le travail sur l'amĂ©lioration du format de stockage se poursuit. Un mode d'Ă©criture optimiste sur disque a Ă©tĂ© mis en Ɠuvre, dans lequel, lors du chargement d'un ensemble de donnĂ©es volumineux en une seule transaction, les donnĂ©es sont compressĂ©es et Ă©crites en mode flux dans le fichier de la base de donnĂ©es, sans attendre la confirmation de la transaction par la commande COMMIT. Lorsque la commande COMMIT est reçue, les donnĂ©es sont dĂ©jĂ  Ă©crites sur le disque, et en cas de ROLLBACK, elles sont abandonnĂ©es. Auparavant, les donnĂ©es Ă©taient d'abord complĂštement enregistrĂ©es en mĂ©moire, puis enregistrĂ©es sur disque au moment du commit.
  • Le support du chargement parallĂšle des donnĂ©es dans des tables distinctes a Ă©tĂ© ajoutĂ©, permettant 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 CPU Ă  10 cƓurs prenait 91 secondes, tandis que dans la nouvelle version, cette opĂ©ration s'effectue en 17 secondes. Deux modes de chargement parallĂšle sont prĂ©vus — avec ou sans maintien de l’ordre des enregistrements.
  • Pour la compression des donnĂ©es, l'algorithme FSST (Fast Static Symbol Table) a Ă©tĂ© utilisĂ©, permettant de compresser les donnĂ©es Ă  l'intĂ©rieur des chaĂźnes en utilisant un dictionnaire partagĂ© de correspondances typiques. L'application de ce nouvel algorithme a permis de rĂ©duire la taille de la base de donnĂ©es de test de 761 Mo Ă  251 Mo.
  • Pour la compression des nombres Ă  virgule flottante (DOUBLE et FLOAT), les algorithmes Chimp et Patas ont Ă©tĂ© proposĂ©s. Par rapport Ă  l'algorithme Gorillas utilisĂ© auparavant, Chimp offre un niveau de compression supĂ©rieur et un dĂ©compression plus rapide. L'algorithme Patas est moins performant en termes de compression par rapport Ă  Chimp, mais il est significativement plus rapide en termes de dĂ©compression, le temps Ă©tant presque identique Ă  celui de la lecture des donnĂ©es non compressĂ©es.
  • Une fonctionnalitĂ© expĂ©rimentale de chargement de donnĂ©es depuis des fichiers CSV en plusieurs flux parallĂšles (SET experimental_parallel_csv=true) a Ă©tĂ© ajoutĂ©e, ce qui rĂ©duit considĂ©rablement le temps de chargement des grands fichiers CSV. Par exemple, avec l'option activĂ©e, le temps de chargement d'un fichier CSV de 720 Mo est passĂ© de 3,5 Ă  0,6 seconde.
  • La possibilitĂ© d'exĂ©cution parallĂšle des opĂ©rations de crĂ©ation et de gestion des index a Ă©tĂ© mise en Ɠuvre. Par exemple, l'exĂ©cution de l'opĂ©ration CREATE INDEX pour une colonne contenant 16 millions d'enregistrements a Ă©tĂ© rĂ©duite de 5,92 Ă  1,38 seconde.
  • L'opĂ©ration d'agrĂ©gation dans les requĂȘtes contenant l'expression «COUNT(DISTINCT col)» a Ă©tĂ© parallĂ©lisĂ©e.
  • Le support du type UNION a Ă©tĂ© ajoutĂ© Ă  SQL, permettant l'association de plusieurs types Ă  un seul Ă©lĂ©ment (par exemple, «UNION(num INT, error VARCHAR))»).
  • SQL permet dĂ©sormais de crĂ©er des requĂȘtes commençant par le mot «FROM» au lieu de «SELECT». Dans ce cas, il est sous-entendu que la requĂȘte commence par «SELECT *».
  • SQL a ajoutĂ© le support de l'expression «COLUMNS», permettant d'effectuer une opĂ©ration sur plusieurs colonnes sans duplication de l'expression. Par exemple, «SELECT MIN(COLUMNS(*)) from obs;» exĂ©cutera la fonction MIN pour chaque colonne de la table obs, tandis que «SELECT COLUMNS(‘val[0-9]+’) from obs;» sĂ©lectionnera les colonnes dont le nom est composĂ© de «val» et de chiffres.
  • Le support des opĂ©rations sur les listes a Ă©tĂ© ajoutĂ©, par exemple, «SELECT [x + 1 for x in [1, 2, 3]] AS l;».
  • Une optimisation de la consommation de mĂ©moire a Ă©tĂ© effectuĂ©e. Par dĂ©faut, sur la plateforme Linux, la bibliothĂšque jemalloc est utilisĂ©e pour la gestion de la mĂ©moire. La performance des opĂ©rations de jointure de hachages a Ă©tĂ© considĂ©rablement amĂ©liorĂ©e avec une mĂ©moire limitĂ©e.
  • Un mode d'affichage «.mode duckbox» a Ă©tĂ© ajoutĂ© Ă  l'interface de ligne de commande, Ă©liminant les colonnes intermĂ©diaires en tenant compte de la largeur de la fenĂȘtre du terminal (adaptĂ© pour une Ă©valuation rapide des rĂ©sultats des requĂȘtes avec un grand nombre de colonnes, comme «SELECT * FROM tbl», qui dans le mode normal se rĂ©partissent sur plusieurs lignes). Avec le paramĂštre «.maxrows X», il est Ă©galement possible de limiter le nombre de lignes affichĂ©es.
  • L'autocomplĂ©tion de la saisie en tenant compte du contexte a Ă©tĂ© intĂ©grĂ©e dans le CLI (les mots-clĂ©s, noms de tables, fonctions, noms de colonnes et noms de fichiers sont complĂ©tĂ©s automatiquement).
  • L'affichage de l'indicateur de progression de l'exĂ©cution de la requĂȘte est activĂ© par dĂ©faut dans le CLI.

Source : opennet.ru

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster