MediaWiki database policy/fr

Cette page décrit le code officiel des règles de la base de données MediaWiki. Il a été approuvé en décembre 2019 via le processus des RFC TechCom par la RFC T220056.

Requêtes dans la base de données

 * Tout code nouveau qui envoie des requêtes SQL à partir de Mediawi ne doit générer aucun avertissement en mode strict MariaDB / MySQL (d'après la RFC T112637).
 * WMF va activer le mode strict MariaDB / MySQL (T108255), qui sera dans tous les cas le mode par défaut de MySQL 5.7. Avant cela, le code doit être exempt de tout avertissement.
 * Le code qui accède à la base de données doit être compatible avec les modes SQL de MySQL suivants :
 * (équivalent à : )
 * Le code de la base de données doit être compatible avec les anciennes versions des bases comme indiqué dans les contraintes d'installation MediaWiki pour le serveur de bases de données. Néanmoins les améliorations de performances qui ne s'appliquent uniquement qu'aux versions supportées les plus récentes (ou celles par défaut, ou largement recommandées par défaut) doivent être favorisées par rapport à celles qui concernent les versions non supportées.
 * Les requêtes non déterministes ainsi que les commandes non sécurisées sur le binlog doivent être évitées parce qu'elles risquent de renvoyer ou d'écrire des résultats différents dans un environnement répliqué. Ce dernier cas peut être détecté par les avertissements concernant le binlog et dont le texte est « [Warning] Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT ». Cela comprend  lorsqu'une clé d'auto-incrémentation est utilisée,    sans , et l'utilisation de fonctions non déterministes telles que  . Informations supplémentaires ici.
 * Les requêtes non déterministes ainsi que les commandes non sécurisées sur le binlog doivent être évitées parce qu'elles risquent de renvoyer ou d'écrire des résultats différents dans un environnement répliqué. Ce dernier cas peut être détecté par les avertissements concernant le binlog et dont le texte est « [Warning] Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT ». Cela comprend  lorsqu'une clé d'auto-incrémentation est utilisée,    sans , et l'utilisation de fonctions non déterministes telles que  . Informations supplémentaires ici.

Modifications du schéma

 * Chaque nouvelle table doit avoir une clé primaire. Lorsqu'un candidat ne peut être créé pour une clé primaire (par exemple, quand toutes les colonnes peuvent être répétées), il faut ajouter une colonne séparée d'auto-incrémentation, ou un autre champ arbitraire (selon le cas).
 * Les clés primaires ainsi que les champs qui les référencent, doivent être non signés, afin d'augmenter les valeurs maximales.

Corrections dans la base de données
Si vous modifiez le schéma de la base de données, observez les règles suivantes :


 * Mise à jour de installer – Mettez à jour  et ajoutez un fichier SQL de patch approprié dans  . La convention de nommage, si vous ajoutez un champ, est  . Pour la supression d'un champ utilisez  . Pour ajouter une table, utilisez  . Voyez l'historique des commits de   pour avoir des exemple sur la manière de faire. Si vous ajoutez plusieurs champs à une même table, faites toutes les modifications dans une seule requête et dans un même fichier de correction.
 * Rendez optionnels vos modifications de schema – Chaque modification du schéma doit passer une période pendant laquelle elle est considérée facultative. Quelques exemples :
 * Instead of changing the format of a column, create a new column, make all writes happen to the old and new column (if it exists), and deprecate use of the old column. Check if the new column exists before blindly assuming that it does. Only eliminate support for the old column after it's clear the schema migration has completed and there's no chance that we'll need to roll back to the old version of the software. If this doesn't seem feasible, send mail to Wikitech-l asking for advice.
 * You could set your new feature to only work if a config option is set to true, and set the option to false by default. Then the commit can be safely deployed before the schema change is made. To deploy your feature to the Wikimedia cluster, file a ticket in Phabricator in the relevant project with the  tag. Once you've confirmed the change has been made, you can remove the config option to enable your feature.
 * Note that this means your schema change should be optional in code - for wikimedia deployments, it is expected that every wiki with the relevant database table(s) will have the schema change applied to them. If you need different schema for different wikis, then apply the change using an extension and creating new tables dependent on that extension.

Il y a des cas où la règle « rendez facultatives vos modifications de schéma » serait contraire du point de vue des performances ou logistique. Néanmoins de telles modifications du schéma restent rares si on veut commencer par elles et doivent faire l'objet d'importantes discussions sur la liste de diffusion wikitech-l. Dans le cas où il est impossible de rendre facultatives les modifications de votre schéma, l'écriture de scripts pour restituer l'état antérieur reste discutable.


 * Rechercher les entrées venant d'un administrateur de base de données de la WMF – MediaWiki est déployé chaque semaine sur les sites web Wikimedia, et cela demande une planification importante pour appliquer les modifications du schéma sur les sites basés sur MySQL représentant la taille de Wikipedia. Jaime Crespo (jcrespo sur LDAP, jynus sur irc et Manuel Arostegui, marostegui) sont les meilleures personnes à ajouter aux relecteurs de la base de données. Dans la plupart des cas, l'entrée est simplement nécessaire pour la logistique des modifications.
 * Testez vos modifications sur Bêta - en particulier, une erreur habituelle consiste à modifier les indexes et la définition des colonnes qui résulterait en différents plans de requêtes. Essayez de tester le plan des requêtes généré avec les outils tels que EXPLAIN; ne pas le faire pourrait signifier, quand porté à l'échelle de la production, que les requêtes qui ne prennent qu'une seconde localement, vont s'accumuler en production lorsqu'elles recevront davantage de traffic et utiliseront des tables plus grandes.