La feuille de route Firebird

Benjamin GAGNEUX - yobenzen

Conférence sur le futur de Firebird par Dimitry Yemanov, membre de la team Firebird Development.
Traduit en français par yobenzen. ♪

- Titre : La feuille de route Firebird

- Auteur : Benjamin GAGNEUX - yobenzen

- Parution : 21 novembre 2005

- Mise à jour : 21 novembre 2005

- Licence : Copyright ® 2005 yobenzen. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Revue de Firebird 2.0

- II. Feuille de route des versions futures

- III. Quelles sont les fonctionnalités à prévoir ?

- III-A. Administration/Tracer/Surveillant

- III-B. Sécurité

- III-C. Extension du langage

- III-D. Extensions/Optimiseurs

- III-E. Maintenance/Récupération

- III-F. Générique/Architecture

- III-G. Les évolutions par versions futures

- IV. Lien et remerciement

I - Revue de Firebird 2.0

Il y a quelque temps, plusieurs de nos utilisateurs ont été étonnés par le nombre de dispositifs libérés dans Firebird 1.5.

Honnêtement, avant de préparer cet article, je n'avais ni comptabilisé les nouvelles fonctionnalités ni aucun indice quant à sa supériorité à la version 1.5. Cependant, l'avantage principal de la version 2.0 ne repose pas sur les fonctionnalités proposées. « Quel est-il alors ? » me demanderez-vous ? Je décrirais Firebird 2.0 comme « version dépassant les limites ennuyeuses ».[…] Je m'explique : aucun doute que Firebird possède une bonne architecture multigénérationnelle et un langage SQL riche, ainsi qu'une bonne intégration et une bonne exécution. Je suis presque sûr que chacun d'entre vous a pu faire l'expérience des quelques limitations internes qui vous ont peut-être inquiété, voire choqué. Pour en citer quelques-unes (sans ordre particulier) :

- la limite non documentée de table environ de 35GB, un débordement peut causer la corruption de données ;

- la libération (garbage collecting) des nœuds d'un index non sélectif est extrêmement lente ;

- une augmentation du cache de pages signifie souvent une exécution plus lente ;

- l'optimiseur ne choisit pas toujours le meilleur plan ;

- le support international est faible, nombreux bugs dans la manipulation d'Unicode/MBCS ;

- absence d'un mécanisme rapide de backup/restore ;

- sécurité faible et nombreuses vulnérabilités connues ;

- condition d'accès aux bases de données en exclusif pour des déclarations référentielles d'intégrité ;

- trop peu de fonctions intégrées ;

- arrêt incertain des bases de données.

Certaines d'entre elles sont d'une priorité critique d'un point de vue métier, d'autres sont simplement ennuyantes. Quoi qu'il en soit, je suis heureux de vous annoncer que Firebird 2.0 élimine la plupart des problèmes mentionnés ci-dessus et réduit de manière significative l'impact des limites encore présentes. J'y accorde, quant à moi, plus d'importance que la déclaration d'un nouveau langage. Cependant, en considération des tonnes de bugs à résoudre et des nouvelles fonctionnalités, Firebird 2.0 représente assurément une évolution déterminante de votre SGBDR favori désormais plus robuste, plus complet, plus rapide et beaucoup plus convivial pour les utilisateurs non ASCII.

Bien sûr, il existe encore des limites et de nombreuses fonctionnalités que nous ne soutenons pas encore. D'ailleurs, il nous faudrait envisager une conférence uniquement consacrée aux améliorations, n'est-ce pas ? Nous aborderons ce sujet un peu plus tard.

Bien, pour ceux qui s'intéressent aux chiffres, lisons les documents WhatsNew et Release Notes et faisons un sommaire totalisant le nombre de changements par version :

- Version 1.0 : 32 améliorations, 55 bugs résolus ;

- Version 1.5 : 58 améliorations, 94 bugs résolus ;

- Version 2.0 : 82 améliorations, 140 bugs résolus.

Note : les statistiques de la version 2.0 représentent son état actuel, c.-à-d. Bêta 1 release. Impressionnante, n'est-ce pas ?

Bien sûr, Firebird 1.5 a été développé sur une période plus importante que Firebird 1.0 et il en va de même pour Firebird 2.0 de toute évidence. Ainsi vous constatez comment le temps d'élaboration a été utilisé.

II - Feuille de route des versions futures

À court terme, notre premier objectif est de fusionner, pour la sortie de la version 3.0, deux codebases : Firebird 2.0 et Vulcan. Cette version sera basée sur l'arbre de Vulcan et possèdera une architecture modulaire, ainsi que des nouvelles fonctionnalités, au même titre que toutes les améliorations apportées par Firebird 2.0. Les dispositifs principaux du codebase de Vulcan sont :

- restructuration globale du code ;

- multithreading de bonne qualité ;

- architecture basée sur un provider unique ;

- mécanisme flexible de configuration ;

- niveau d'authentification des bases de données et gestion de la sécurité avancée ;

- exécution interne de DSQL.

Alors que les Releases de Firebird 2.0 et de Firebird Vulcan coexisteront l'année prochaine, vous vous demandez pourquoi la version 3.0 est numérotée en majeur release et ce qu'elle contiendra de plus (excepté des fonctionnalités déjà présentes dans les deux codebases). C'est une bonne question. Bien que nous souhaitons réduire le cycle de développement 3.0 autant que possible, on ne s'attend pas à ce qu'un nouveau développement complet se produise dans cette version. Cependant, nous avons besoin de préserver nos utilisateurs avertis, et, en conséquence, quelque chose de nouveau devrait être présenté. La solution est simple : la release 3.0 va incorporer tout le travail fait par des branches indépendantes internes. Comme vous le savez peut-être, il y a quelques améliorations faites par les divers réalisateurs de Firebird qui ne sont pas entrées dans la release 2.0, dû aux contraintes de temps. Certaines d'entre elles sont incluses et examinées dans Fyracle, d'autres resteront encore dans les arbres privés. En outre, nous avons toujours quelques dispositifs dans Yaffil qui exigent un backporting dans Firebird. Tout ce qui est mentionné ci-dessus est exactement la nouvelle substance que vous verrez dans la version 3.0. voyons ce qui a été déjà fait.

- Les tables d'expressions et requêtes récursives communes (conforme Sql-99)
Développé par : Paul Ruizendaal
État actuel : Accompli

- Les tables temporaire globales (conforme Sql-99)
Développé par : Vlad Horsun
État actuel : Accompli

- Les procédures/fonctions externes (conforme Sql-99)
Développé par : Eugene Putilin, Roman Rokytskyy, Vlad Horsun
État actuel : Partiellement fait, exige la discussion du rappel de service API

- Les nouvelles fonctions intégrées (string, maths, binaire, date/time)
Développé par : Oleg Loa
État actuel : Accompli, mais exige quelques changements

Ces évolutions sont les candidates principales pour Firebird 3.0, mais il y en a d'autres (moins importantes) aussi bien.

Dès que la version 3.0 sera disponible pour l'essai public, le développement de la prochaine version commencera. Nous n'avons pas encore pris de décision au sujet de la numérotation de version, ainsi elle pourrait être 3.5 ou 4,0 ou autre. Sur la durée de cet entretien, je l'appellerai la « version 3.0+ », où le + signifie simplement « la prochaine version ». La version 3.0+ aura des changements majeurs de l'ODS aussi bien que beaucoup d'options d'administration, de traçage (log), de sécurité, de performance et une amélioration du support SQL. Et plus probablement, il contiendra également la mise à jour à distance du protocole. Maintenant c'est un peu tôt pour dire ce qui sera exactement inclus dans cette version, mais vous trouverez quelques informations un peu plus tard.

Si vous me demandiez de décrire les priorités de développement générique, elles seraient :

1. Fiabilité et sûreté (résolution de bugs, récupération garantie et améliorations de la sécurité) ;

2. Facilité d'administration et monitoring ;

3. Compatibilité avec les normes SQL ;

4. Performance (algorithmes et optimiseurs améliorés) ;

5. Extensions du langage.

Maintenant quelques mots au sujet des versions intermédiaires 2.0. D'abord, notre programme de maintenance couvrira certainement le produit 2.0, et donc les nouvelles versions 2.0.1, 2.0.2, etc.. (contenant des bugfixes) presque tous les mois. Comme toujours, ces versions se composeront de changements backported de la branche active du développement. Ainsi, si vous voyez votre bug « favori » fixé dans la version 3.0, vous êtes libre d'interroger des réalisateurs au sujet de le mettre en application dans la prochaine version de 2.0.x. En second lieu, je m'attendrais à ce que certaines des évolutions programmées de la 3.0 (par exemple implémentation de GTT ou le code WITH [RECURSIVE]) soient portées sur la branche de développement 2.0 HEAD avant de fusionner afin de rendre une version 2.1 mineure possible dans le cas d'un retard avec le développement 3.0.

Rappelant tout ce qui a été dit ci-dessus, le planning devrait ressembler à ça :

2005

- Release 2.0 RC et déviation vers 2.0 HEAD pour créer la branche de développement

- Porter quelques changements aux arbres indépendants à HEAD

- Division du Vulcan HEAD pour créer la branche de développements pour 3.0

2006, 1er trimestre:

- Sortie des versions finales Firebird 2.0 et Firebird Vulcan

2006, 2e trimestre

- Sortie Firebird 3.0 Bêta

- Division de la 3.0 HEAD pour créer la branche de 3.0+ développements

2006, 3e trimestre

- Sortie de la version finale Firebird 3.0

2006, 4e trimestre

- Sortie de Firebird 3.0+ Bêta

Le point clé de cette feuille de route est la mise à disposition des releases Firebird 2.0 et Firebird Vulcan. Et c'est exactement le point où votre aide avec testing/feedback nous permet d'avancer plus rapidement.

III - Quelles sont les fonctionnalités à prévoir ?

La présente partie de notre entretien est consacrée aux activités de projet que nous compterions voir dans un avenir proche. Pour suivre la liste plus facilement, elles sont groupées par catégorie, semblable à notre traqueur RFE.

Chaque travail a deux paramètres associés : priorité et complexité. La valeur prioritaire est basée sur des souhaits d'utilisateurs, elle est installée après avoir regardé de divers scrutins et discussions de forum/newsgroup. En d'autres termes, elle montre combien nos utilisateurs veulent des fonctionnalités particulières. En outre, cette valeur dépend de notre analyse des fonctionnalités offertes par nos concurrents. La valeur de complexité est basée sur des évaluations de temps/effort faites par l'équipe de noyau. « Aucune » signifie que tout le travail exigé est déjà effectué (dans une certaine branche de développement) et nous avons juste besoin de backport et de tests. « Implementation » signifie que la fonctionnalité a déjà été discutée et des accords ont été convenus, mais il exige toujours quelques discussions mineures et le codage réel. « Design » signifie que nous avons un accord de base et quelques visions des choses, mais que le travail détaillé n'a pas encore été discuté et par conséquent nous n'avons aucun planning de réalisation. « Recherche » signifie que le travail exige une analyse sérieuse avant de discuter des caractéristiques de conception et d'exécution.

III-A - Administration/Tracer/Surveillant

- Monitoring via l'API et/ou des tables spéciales
Exécuter un « snapshot » de monitoring (c.-à-d. à un moment donné) des activités internes à l'intérieur du moteur. Les objets évidents d'une telle surveillance sont : les bases de données, les attachements, les transactions, les requêtes actives, l'utilisation de ressource (mémoire, CPU), etc.
priorité = haut
complexité = design/implementation

- Rapport asynchrone d'Annulation/time out
Forcer n'importe laquelle des actions suivantes : annuler un statement courant, rollback d'une transaction, tuer une dépendance. Permettre un time out pour des statements SQL. Devrait être disponible au moins au niveau de l'API.
priorité = haut
complexité = Implementation

- Logging/audit détaillé
Permettre le log de quelques événements se produisant sur le serveur. Ceux-ci peuvent être : l'authentification acceptée/rejetée (contenant l'information du client), préparer/exécuter des statements SQL, de committed/rolled back des transactions, etc. Nous avons besoin d'API pour installer les événements requis et pour rechercher la notation d'audit.
priorité = moyenne
complexité = design

- SQL détaillé tracing/profiling
Montrer les détails du chemin d'accès (au niveau de l'arbre RSB) pour chaque récupération, le nombre de lignes (profil TEMPS CPU, etc.) pour chaque nœud. Les statistiques d'exécution disponibles devraient être étendues.
priorité = moyenne
complexité = design/implementation

- Niveau DDL et triggers globaux.
Permettre des triggers ON CREATE/ALTER/DROP. Implémente les dépendances de triggers et le niveau de transaction des triggers en fonctionnement dans des transactions autonomes.
priorité = moyenne
complexité = design

- PSQL debugging extentions/hooks
Permettre le débogage PSQL via introduction : looper breakpoints, handler callbacks, récupération du contexte de données, etc.
priorité = basse
complexité = Recherche

III-B - Sécurité

- Gestion des users/SQL users
Permettre la gestion des utilisateurs dans la base de données
priorité = haut
complexité = Aucune (fait dans Vulcan)

- Droits d'utilisateur pour les métadata
Protéger toutes les métadata avec des classes de sécurité. Mettre en application les permissions au niveau metadata. Ajouter les permissions au niveau base de données comme BACKUP, DROP, etc.
priorité = haut
complexité = design

- Modules d'authentification pluggable
Activer l'utilisation de mécanismes d'authentification adaptés (par exemple ceux de l'OS)
priorité = moyenne
complexité = Design

- Groupes de sécurité
Concevoir une sécurité basée sur les groupes comme alternative à celle basée sur les rôles.
priorité = moyenne
complexité = Recherche

- Cryptage de la base de données
Permettre le cryptage des enregistrements de la base de données. La gestion de clefs reste une question en suspens ici.
priorité = moyenne
complexité = Recherche

III-C - Extension du langage

- Schemas/espace dans les noms
D'abord, il réduit de manière significative un coût de l'issue avec des noms courts de métadata. En second lieu, il simplifie l'administration, car un certain nombre de différentes bases de données pourraient être unies dans un fichier simple. Troisièmement, il nous permet finalement d'être entièrement conforme Sql-92 (niveau d'entrée).
priorité = haut
complexité = Recherche

- Type de données numériques long d'origine
Mettre en application le type de données long numérique exact (avec une précision jusqu'à plus de 30 chiffres décimaux) et l'arithmétique BCD appropriée.
priorité = haut
complexité = Recherche

- Plus de fonctions intégrées
Les fonctions intégrées Sql-99 (celles d'importance majeure pour nous) doivent être implémentées d'abord. Puis nous aurons besoin des feedbacks d'utilisateurs sur d'autres fonctions.
priorité = haut
complexité = Design/Implementation

- Tables temporaires/datasets
Permettre les schémas d'objets et/ou datasets temporaires. La conformité Sql-99 est exigée, des extensions sont les bienvenues.
priorité = haut
complexité = Design/Implementation (partiellement fait dans Fyracle)

- De plus longs noms de métadata
Jusqu'à 128 caractères d'Unicode.
priorité = moyenne
complexité = Design

- Fonctions SQL
fonctions CREATE/ALTER/DROP selon Sql-99.
priorité = moyenne
complexité = Implementation

- Domaines partout
Permettre l'utilisation des domaines dans les paramètres et les variables de PSQL, aussi bien que dans la fonction de CAST.
priorité = moyenne
complexité = Design

- Requêtes récursives
L'utilisation du SQL pour des récupérations récursives. Rendre conforme aux spécifications de SQL.
priorité = moyenne
complexité = Aucune (fait dans Fyracle)

- Expressions régulières
Permettre l'utilisation des expressions régulières en condition de recherche. Ajouter une certaine syntaxe spéciale (un nouvel attribut).
priorité = moyenne
complexité = Design/Implementation

- TEXT BLOB compatible avec [VAR]CHAR
Permettre au BLOB SUB_TYPE TEXT d'être compatible/interchangeable avec des types de données chaine de caractères. Permettre les TEXT BLOB dans toutes les fonctions intégrées.
priorité = moyenne
complexité = Design/Implementation

- Contraintes reportées
Mettre en application la contrainte de commit-time vérifiant les spécifications de SQL.
priorité = basse
complexité = Design

III-D - Extensions/Optimiseurs

- Jointures externes plus rapides
Implémenter l'algorithme de fusion pour les jointures externes.
priorité = haute
complexité = Implementation

- Améliorations d'optimiseur
Fixer bugs/limitations connus, de meilleures décisions d'optimiseur, plus de statistiques de données
priorité = moyenne
complexité = Design/Implementation

- Plus de chemins d'accès
Implémenter de hash join / hash aggregate et d'autres algorithmes de récupération utilisés dans les concurrents SGBDR.
priorité = moyenne
complexité = Recherche

- Tris plus efficaces
Implémenter un tri partiel pour accélérer les récupérations limitées (FIRST). Trier les RecNo au lieu des enregistrements entiers (rows).
priorité = moyenne
complexité = Design

- Protocole de réseau optimisé
Éviter d'envoyer beaucoup de données inutiles (buffer tails). Implémenter des groupes de protocole (par exemple préparation + information). Comprimer les espaces plus efficacement.
priorité = moyenne
complexité = Recherche

III-E - Maintenance/Récupération

- Protection logique fiable
Le seul cas de la protection inrestaurable devrait être une protection physiquement corrompue. Les objets primitifs (générateurs, UDF, etc.) doivent être reconstitués dans le commencement. Des colonnes calculées et les contraintes de validation doivent être reconstituées à l'extrémité. Le moteur devrait rejeter des données contradictoires au lieu de les transformer en indiquant (par exemple aucune valeur - > NULLE). GBAK devrait permettre la restauration partielle, conduite par des commutateurs ou interactivement.
priorité = haute
complexité = Design

- Récupération Point-dans-temps
Le moteur doit avoir une capacité facultative de maintenir un log de « à refaire » (redo) pour passer au-dessus de la dernière protection logique. Aucune perte de données n'est acceptable.
priorité = haute
complexité = Recherche

III-F - Générique/Architecture

- Appui de SMP dans le SuperServer
Supporter de manière efficace le multithreading dans l'architecture du SuperServer.
priorité = haute
complexité = Aucune (fait dans Vulcan)

- Mise en cache des « statements » compilés
Supporter la mise en cache et la réutilisation des « statements » compilés.
priorité = haute
complexité = Implementation (partiellement faite dans Vulcan)

- Contenu des statements/transactions
Résoudre les contradictions connues dans les verbes/transactions. La plupart du temps, ceci couvre le comportement de blr_for dans des rapports d'insert/update/delete. Rendre les transactions read-committed conformes avec les spécifications SQL.
priorité = haute
complexité = Design

- Source de données externe/liens de base de données/base de données SQL croisée
Permettre la récupération depuis des sources de données externes. Fournir quelques drivers (FB natif, JDBC, ODBC) dans les distributions. Ajouter DDL pour déclarer et DML pour employer de telles sources. Implémenter l'optimisation des récupérations pour les sources de données natives.
priorité = haute
complexité = Recherche

- Fonctions/procédures externes
Permettre de créer des procédures/functions écrites en langues non PSQL. Fournir quelques drivers (cdecl, Java, NET) dans les distributions.
priorité = haute
complexité = Design/Implementation (partiellement fait dans Fyracle)

- Recherche intégrale de texte
Implémenter les fonctionnalités FTS à l'intérieur du moteur ou ajouter l'API pour brancher les moteurs externes FTS. FB semble être le seul SGBDR qui n'a pas cette fonctionnalité actuellement.
priorité = moyenne
complexité = Recherche

- Clustering
MySQL soutient les clusters (AFAIK, seulement mémoire partagée jusqu'ici), il en est de même pour PostgreSQL avec les disques partagés. Cette fonctionnalité fait de plus en plus parler d'elle. Nous devrions être plus concurrentiels.
priorité = moyenne
complexité = Recherche

- Index bidirectionnels
Permettre la navigation renversée d'index pour l'utilisation des ASC-index pour les tris DESC et vice versa.
priorité = moyenne
complexité = Implementation

- Intégrité référentielle sans index
Permettre (sur option) les clefs étrangères qui ne sont pas imposées par des index. Fournir en outre une capacité de réutiliser l'index existant pour une contrainte.
priorité = moyenne
complexité = Design

- Le volume load/import
Permettre des capacités de charge massive plus efficaces. Fournir les utilitaires et la syntaxe pour l'emploi de différents formats d'entrée (csv, schéma de xml, etc.) pour l'importation.
priorité = moyenne
complexité = Design

- Curseurs bidirectionnels
Implémentation des curseurs scrollable à l'intérieur du moteur ou fournir une couche mince au-dessus de la hiérarchie RSB pour mettre en application la fonctionnalité par l'intermédiaire du cache.
priorité = basse
complexité = Recherche

- Intégration de XML
Passer du dernier fetch au XML et permettre les insertions depuis le XML. Permettre le BLOB SUB_TYPE XML et mettre en application des requêtes XPath.
priorité = basse
complexité = Recherche

III-G - Les évolutions par versions futures

Évidemment, la liste mentionnée ci-dessus n'est pas complète, elle inclut uniquement les changements que nous considérons la plupart du temps comme importants. Si dans cette liste manque votre souhait, parlez-en maintenant !

Créons à présent une matrice où les fonctionnalités les plus souhaitables et réalisables sont placées dans le coin supérieur gauche et les plus difficilement réalisables et/ou les moins nécessaires sont dans le coin inférieur droit. Si vous vous déplacez d'un coin à l'autre, vous verrez les fonctionnalités probables de la feuille de route. Rappelant ce qui a été dit avant, nous pourrions imaginer une carte routière plus détaillée :

Firebird 3.0 (la version fusionnée)

- Monitoring

- Annulation asynchrone des statements

- Gestion des users/SQL users

- Plus de fonctions intégrées

- Tables temporaires

- Fonctions SQL

- Requêtes récursives

- Jointures externes plus rapides

- Supporter SMP dans le SuperServer

- Mise en cache de statements compilés

- Fonctions/procédures externes

Comme vous pouvez voir (et comme énoncé plus tôt), on s'attend à ce que la version 3.0 inclue le travail déjà effectué et quelques fonctionnalités qui sont fortement souhaitées et relativement faciles à mettre en application. Le reste tend à ralentir le développement et par conséquent est exclu de la liste ci-dessus.

Firebird 3.0+ (la prochaine version principale)

- Logging/audit détaillé

- Permissions de SQL tracing/profilingUser pour le metadata

- Modules d'authentification pluggable

- Groupes de sécurité

- Type de données numériques long d'origine

- Domaines omniprésents

- Expressions régulières

- BLOB TEXT compatible avec [VAR]CHAR

- Protection logique fiable

- Améliorations d'optimiseur

- Contenu statement/transaction, compatible read-commited

- Protocole de réseau optimisé

- Index bidirectionnels

- Intégrité référentielle sans index

- Le volume load/import

Il serait également intéressant de pouvoir concevoir des schemas/nom avec espaces et plus longs noms de métadata pour 3.0+, mais aucune promesse ne peut être faite dans ce sens, ici. Il en va de même pour les sources de données externes et les contraintes d'intégrité.

Firebird 3.0++ (nous n'avons pas de planning pour l'instant)

- PSQL debugging extentions/hooks

- Cryptage de base de données

- Ajout de chemins d'accès supplémentaire

- Recherche intégrale de texte

- Clustering

- Curseurs bidirectionnels

- Intégration de XML

Naturellement, quelques releases intermédiaires ou mineures peuvent être produites en attendant, car nous essayerons de rendre les cycles de développement plus courts. Bientôt, les détails seront discutés et seront convenus par les administrateurs de projets, vous disposerez d'une feuille de route à court terme réelle et une feuille de route à long terme prévisionnelle sur notre site.

IV - Lien et remerciement

Pour de plus ample information : http://firebird.sourceforge.net

Un grand merci à neguib pour son aide à la traduction et la correction orthographique.