SQLite 3.25 : la prochaine version du moteur de base de données va apporter le support des fonctions Window
Et un meilleur optimiseur de requêtes

Le , par Michael Guilloux, Chroniqueur Actualités
SQLite est un moteur de base de données relationnelle léger accessible par le langage SQL. Contrairement aux serveurs de bases de données traditionnels, comme MySQL ou PostgreSQL, sa particularité est de ne pas reproduire le schéma habituel client-serveur, mais d'être directement intégrée aux programmes. L'intégralité de la base de données (déclarations, tables, index et données) est en effet stockée dans un fichier indépendant de la plateforme.

SQLite est le moteur de base de données le plus utilisé au monde. Grâce à son extrême légèreté, entre autres, il est utilisé dans de nombreux logiciels grand public, et est également très populaire sur les systèmes embarqués, notamment sur la plupart des smartphones modernes.


La prochaine version, SQLite 3.25.0, est prévue pour le mois prochain, et le 16 août, la communauté SQLite a publié sur son site officiel un aperçu de ce que les utilisateurs peuvent attendre de cette version. Il s'agit d'un draft qui met en avant quelques fonctionnalités et correctifs ; les principales nouveautés étant l'ajout du support des fonctions Window et des améliorations de l'optimiseur de requêtes.

Une fonction Window (ou fonction de fenêtrage) est une fonction SQL spéciale dans laquelle les valeurs d'entrée proviennent d'une "fenêtre" d'une ou de plusieurs lignes du jeu de résultats d'une instruction SELECT. Les fonctions de fenêtrage se distinguent des fonctions SQL ordinaires par la présence d'une clause OVER. Elles peuvent également comporter une clause FILTER entre la fonction de base et la clause OVER. Contrairement aux fonctions ordinaires, les fonctions de fenêtrage ne peuvent pas utiliser le mot-clé DISTINCT. De plus, elles ne peuvent apparaître que dans le jeu de résultats et dans la clause ORDER BY d'une instruction SELECT.

Une fonction de fenêtrage effectue un calcul sur un jeu d'enregistrements liés d'une certaine façon à l'enregistrement courant. On peut les rapprocher des calculs réalisables par une fonction d'agrégat, mais contrairement à une fonction d'agrégat, l'utilisation d'une fonction de fenêtrage n'entraîne pas le regroupement des enregistrements traités en un seul. Chaque enregistrement garde son identité propre. Mais en coulisse, la fonction de fenêtrage est capable d'accéder à d'autres enregistrements que l'enregistrement courant du résultat de la requête. Voici un exemple tiré de la documentation PostgreSQL permettant de comparer le salaire d'un employé (noemp) avec le salaire moyen de sa division (nomdep) :


Les trois premières colonnes viennent directement de la table salaireemp, et il y a une ligne de sortie pour chaque ligne de la table. La quatrième colonne représente une moyenne calculée sur tous les enregistrements de la table qui ont la même valeur de nomdep que la ligne courante. Il s'agit effectivement de la même fonction que la fonction d'agrégat classique avg, mais la clause OVER entraîne son exécution en tant que fonction de fenêtrage et son calcul sur le jeu approprié d'enregistrements. Cela illustre un peu l'utilité des fonctions de fenêtrage.

Précisons que la communauté SQLite a effectué plusieurs tests sur PostgreSQL pour s'assurer que les fonctions de fenêtrage introduites dans la version 3.25.0 fonctionnent de la même manière dans SQLite et PostgreSQL.

Comme nous l'avons annoncé également, SQLite 3.25 apporte des améliorations de l'optimiseur de requêtes. On notera par exemple que les chargements inutiles de colonnes dans une requête agrégée seront évités. Il s'agit de colonnes qui ne sont ni dans une fonction d'agrégation ni dans une partie de la clause GROUP BY. Cette version va également introduire l'optimisation IN-early-out. En effet, lors d'une recherche sur un index multicolonnes, un opérateur IN est utilisé sur une colonne autre que la colonne la plus à gauche. Si aucune ligne ne correspond à la première valeur IN, SQLite va vérifier l’existence de lignes correspondant aux colonnes à droite avant de poursuivre avec la prochaine valeur IN. Comme autre amélioration de l'optimiseur de requêtes, il faut également souligner que la propriété transitive peut être utilisée pour propager des valeurs constantes dans la clause WHERE. Par exemple, cela permet de convertir “a=99 AND b=a” en “a=99 AND b=99”.

Ce ne sera pas tout pour les nouveautés prévues dans SQLite 3.25. En plus de quelques corrections de bogues, un changement dans le moteur de base de données léger va se traduire par une concurrence légèrement meilleure dans les environnements multithread. On peut aussi citer une amélioration de la commande PRAGMA integrity_check pour une meilleure détection des problèmes sur la page freelist. Rappelons en effet qu'elle permet d'effectuer un contrôle d'intégrité de la base de données entière, en recherchant divers problèmes.

Sources : Site officiel SQLite, GitHub.

Et vous ?

Utilisez-vous SQLite dans vos développements ?
Quels sont selon vous ses forces et faiblesses ?
Que pensez-vous des nouveautés à venir dans SQLite 3.25 ? Lesquelles estimez-vous les plus utiles ?
Quelles sont vos attentes pour les prochaines versions de SQLite ?

Voir aussi :

SQLite est 35 % plus rapide que le système de fichiers, selon les tests des développeurs du moteur de base de données
La version 3.18 de SQLite est disponible, avec un nouvel identifiant utilisant le hachage SHA3-256 et l'ajout de la commande PRAGMA optimize
Le moteur de base de données SQLite est disponible en version 3.17, avec des améliorations de performance à plusieurs niveaux et trois correctifs
Microsoft : SQLite intègre les fonctionnalités système de Windows 10, pour améliorer l'accès aux données
Un développeur évoque cinq raisons pour vous faire utiliser SQLite en 2016, que pensez-vous de ses arguments ?

Rubrique SGBD, Forum SQLite, Cours et Tutoriels SGBD, FAQ SGBD


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse Signaler un problème

Avatar de Michael Guilloux Michael Guilloux - Chroniqueur Actualités https://www.developpez.com
le 17/09/2018 à 12:42
SQLite 3.25 est disponible en téléchargement
le moteur de base de données léger apporte le support des fonctions Window, un meilleur optimiseur de requêtes et plus

SQLite est un moteur de base de données relationnelle léger accessible par le langage SQL. Contrairement aux serveurs de bases de données traditionnels, comme MySQL ou PostgreSQL, sa particularité est de ne pas reproduire le schéma habituel client-serveur, mais d'être directement intégrée aux programmes. L'intégralité de la base de données (déclarations, tables, index et données) est en effet stockée dans un fichier indépendant de la plateforme.

SQLite est le moteur de base de données le plus utilisé au monde. Grâce à son extrême légèreté, entre autres, il est utilisé dans de nombreux logiciels grand public, et est également très populaire sur les systèmes embarqués, notamment sur la plupart des smartphones modernes.

Comme nous l'avions annoncé il y a près d'un mois, la version 3.25 devait débarquer ce mois-ci. Eh bien, depuis le 15 septembre, elle est disponible en téléchargement avec un petit lot de nouveautés que les utilisateurs devraient apprécier.


Support des fonctions Window

C'est l'une des nouveautés les plus intéressantes de cette nouvelle version de SQLite. Pour rappel, une fonction Window (ou fonction de fenêtrage) est une fonction SQL spéciale dans laquelle les valeurs d'entrée proviennent d'une "fenêtre" d'une ou de plusieurs lignes du jeu de résultats d'une instruction SELECT. Les fonctions de fenêtrage se distinguent des fonctions SQL ordinaires par la présence d'une clause OVER. Elles peuvent également comporter une clause FILTER entre la fonction de base et la clause OVER. Contrairement aux fonctions ordinaires, les fonctions de fenêtrage ne peuvent pas utiliser le mot-clé DISTINCT. De plus, elles ne peuvent apparaître que dans le jeu de résultats et dans la clause ORDER BY d'une instruction SELECT.

Une fonction de fenêtrage effectue un calcul sur un jeu d'enregistrements liés d'une certaine façon à l'enregistrement courant. On peut les rapprocher des calculs réalisables par une fonction d'agrégat, mais contrairement à une fonction d'agrégat, l'utilisation d'une fonction de fenêtrage n'entraîne pas le regroupement des enregistrements traités en un seul. Chaque enregistrement garde son identité propre. Mais en coulisse, la fonction de fenêtrage est capable d'accéder à d'autres enregistrements que l'enregistrement courant du résultat de la requête. Voici un exemple permettant de comparer le salaire d'un employé (noemp) avec le salaire moyen de sa division (nomdep) :


Les trois premières colonnes viennent directement de la table salaireemp, et il y a une ligne de sortie pour chaque ligne de la table. La quatrième colonne représente une moyenne calculée sur tous les enregistrements de la table qui ont la même valeur de nomdep que la ligne courante. Il s'agit effectivement de la même fonction que la fonction d'agrégat classique avg, mais la clause OVER entraîne son exécution en tant que fonction de fenêtrage et son calcul sur le jeu approprié d'enregistrements. Cela illustre un peu l'utilité des fonctions de fenêtrage. Précisons que la communauté SQLite a effectué plusieurs tests sur PostgreSQL pour s'assurer que les fonctions de fenêtrage introduites dans la version 3.25.0 fonctionnent de la même manière dans SQLite et PostgreSQL.

Améliorations de la commande ALTER TABLE

SQLite prend en charge un sous-ensemble limité de la commande SQL ALTER TABLE. La commande ALTER TABLE de SQLite permet à l'utilisateur de renommer une table, de renommer une colonne dans une table ou d'ajouter une nouvelle colonne à une table existante.

Dans sa nouvelle version, SQLite ajoute le support pour renommer des colonnes dans une table en utilisant ALTER TABLE table RENAME COLUMN oldname TO newname. Le nom de la colonne est modifié à la fois dans la définition de la table elle-même et dans tous les index, déclencheurs et vues qui font référence à la colonne. Si le changement de nom de colonne entraîne une ambiguïté sémantique dans un déclencheur ou une vue, alors RENAME COLUMN échoue avec une erreur et aucune modification n'est appliquée.

Il faut encore noter, au nombre des améliorations de la commande ALTER TABLE, que la fonctionnalité de changement de nom de table a été corrigée afin de mettre également à jour les références à la table renommée dans les déclencheurs et les vues.

Améliorations de l'optimiseur de requêtes

Comme nous l'avons annoncé également le mois passé, SQLite 3.25 apporte des améliorations de l'optimiseur de requêtes. On notera par exemple que les chargements inutiles de colonnes dans une requête agrégée seront évités. Il s'agit de colonnes qui ne sont ni dans une fonction d'agrégation ni dans une partie de la clause GROUP BY. Cette version introduit aussi l'optimisation IN-early-out. En effet, lors d'une recherche sur un index multicolonnes, un opérateur IN est utilisé sur une colonne autre que la colonne la plus à gauche. Si aucune ligne ne correspond à la première valeur IN, SQLite va vérifier l’existence de lignes correspondant aux colonnes à droite avant de poursuivre avec la prochaine valeur IN. Comme autre amélioration de l'optimiseur de requêtes, il faut également souligner que la propriété transitive peut être utilisée pour propager des valeurs constantes dans la clause WHERE. Par exemple, cela permet de convertir “a=99 AND b=a” en “a=99 AND b=99”.

Autres nouveautés

En plus de quelques corrections de bogues, un changement dans le moteur de base de données léger se traduit par une concurrence légèrement meilleure dans les environnements multithread. On peut aussi citer une amélioration de la commande PRAGMA integrity_check pour une meilleure détection des problèmes sur la page freelist. Rappelons en effet qu'elle permet d'effectuer un contrôle d'intégrité de la base de données entière, en recherchant divers problèmes.

SQLite 3.25 ajoute aussi le contrôle de fichier en utilisant l'opcode SQLITE_FCNTL_DATA_VERSION pour détecter des changements dans un fichier de base de données. Notons également l'ajout du module Geopoly, une interface alternative à l'extension R-Tree qui utilise la notation GeoJSON pour décrire les polygones bidimensionnels. Pour information, les R-Trees sont le plus souvent utilisés dans les systèmes géospatiaux où chaque entrée est un rectangle avec des coordonnées X et Y minimales et maximales. En ce qui concerne la norme GeoJSON, il s'agit d'une syntaxe permettant d'échanger des informations géospatiales à l'aide de JSON.

Il s'agit ici des principaux changements dans cette version. Il y a de nombreux petits changements qui ont été introduits que pourrez consulter sur le site officiel de SQLite.

Page de téléchargement de SQLite

Source : Site officiel SQLite

Et vous ?

Utilisez-vous SQLite dans vos développements ?
Quels sont selon vous ses forces et faiblesses ?
Que pensez-vous des nouveautés de SQLite 3.25 ? Lesquelles estimez-vous les plus utiles ?
Quelles sont vos attentes pour les prochaines versions de SQLite ?

Voir aussi :

SQLite est 35 % plus rapide que le système de fichiers, selon les tests des développeurs du moteur de base de données
La version 3.18 de SQLite est disponible, avec un nouvel identifiant utilisant le hachage SHA3-256 et l'ajout de la commande PRAGMA optimize
Le moteur de base de données SQLite est disponible en version 3.17, avec des améliorations de performance à plusieurs niveaux et trois correctifs
Microsoft : SQLite intègre les fonctionnalités système de Windows 10, pour améliorer l'accès aux données
Un développeur évoque cinq raisons pour vous faire utiliser SQLite en 2016, que pensez-vous de ses arguments ?

Rubrique SGBD, Forum SQLite, Cours et Tutoriels SGBD, FAQ SGBD

 
Contacter le responsable de la rubrique Accueil