Lors de la création d'une base de données, un facteur de performances souvent négligé mais essentiel est le moteur de stockage (en particulier lorsque la base de données se développe). Dans de nombreux cas, la tentation est simplement d'accepter la valeur par défaut et de continuer à développer votre projet. Cela peut entraîner des impacts négatifs inattendus sur les performances, les sauvegardes et l'intégrité des données plus tard dans le cycle de vie de l'application, par exemple lorsque votre équipe met en œuvre des analyses et des tableaux de bord MySQL.
Pour éviter ces pièges potentiels, nous allons examiner de plus près certains des moteurs de stockage les plus largement utilisés pris en charge par MySQL (à partir de la version 5.7).
Moteurs de stockage pris en charge
Quelles sont mes options ?
Par défaut, MySQL 5.7 prend en charge dix moteurs de stockage (InnoDB, MyISAM, Memory, CSV, Archive, Blackhole, NDB, Merge, Federated et Example). Pour voir lesquels sont disponibles et pris en charge par votre serveur, utilisez cette commande :
mysql> AFFICHER LES MOTEURS\G
Cela affichera une liste de moteurs de stockage et vous indiquera lesquels sont disponibles, non disponibles ou lesquels sont actuellement définis par défaut. La colonne "Support :" affichera respectivement "OUI", "NON" ou "PAR DÉFAUT".
Dans certaines applications, il peut être nécessaire d'avoir différents moteurs de stockage pour différentes tables dans la même base de données. Ceci est un exemple de la raison pour laquelle vous devez planifier avec soin le modèle de données de votre application. Dans la plupart des cas, cependant, un seul moteur de stockage sera nécessaire.
Capacités du moteur de stockage
En quoi sont-ils doués ?
Examinons de plus près certains des moteurs de stockage les plus couramment utilisés. Cela nous donnera une idée de ce pour quoi chaque moteur a été conçu et de la meilleure façon de les utiliser pour atteindre nos objectifs commerciaux.
InnoDB : Option par défaut dans MySQL 5.7, InnoDB est un moteur de stockage robuste qui offre :
- Conformité ACID totale
- Validation, restauration et reprise sur incident
- Verrouillage au niveau de la ligne
- Contraintes d'intégrité référentielle FOREIGN KEY
- Augmenter la simultanéité multi-utilisateurs (via des lectures non verrouillables)
Avec la fonctionnalité ci-dessus offerte par InnoDB, il est évident que c'est le moteur par défaut de MySQL. C'est un moteur qui fonctionne bien et offre de nombreux attributs requis dont toute base de données aurait besoin. Cependant, une discussion complète de toutes ses capacités sort du cadre de cet article. C'est le moteur qui sera très probablement utilisé dans la majorité des applications.
MonISAM : La fonctionnalité qui distingue MyISAM est sa capacité à :
- index de recherche plein texte
- verrouillage au niveau de la table
- manque de support pour les transactions
Bien qu'il s'agisse d'un moteur de stockage rapide, il convient mieux aux applications à lecture intensive et principalement lues telles que l'entreposage de données et les applications Web qui n'ont pas besoin de prise en charge des transactions ou de conformité ACID.
NDB (ou NDBCLUSTER) :Si un environnement en cluster est l'endroit où votre base de données fonctionnera, NDB est le moteur de stockage de choix. C'est mieux quand vous avez besoin :
- Informatique distribuée
- Haute redondance
- Haute disponibilité
- Les temps de disponibilité les plus élevés possibles
Notez que la prise en charge de NDB n'est pas incluse dans la distribution des binaires MySQL Server 5.7 standard. Vous devrez mettre à jour la dernière version binaire de MySQL Cluster. Cependant, si vous développez dans un environnement de cluster, vous avez probablement l'expérience nécessaire pour gérer ces tâches.
CSV : Un moteur de stockage utile lorsque les données doivent être partagées avec d'autres applications qui utilisent des données au format CSV. Les tables sont stockées sous forme de fichiers texte de valeurs séparées par des virgules. Bien que cela facilite le partage des données avec les scripts et les applications, un inconvénient est que les fichiers CSV ne sont pas indexés. Ainsi, les données doivent être stockées dans une table InnoDB jusqu'à l'étape d'importation/exportation du processus.
Trou noir : Ce moteur accepte mais ne stocke pas les données. Semblable à UNIX /dev/null, les requêtes renvoient toujours un ensemble vide. Cela peut être utile dans un environnement de base de données distribuée où vous ne souhaitez pas stocker de données localement ou dans des situations de test de performances ou autres.
Archive : Comme son nom l'indique, ce moteur est excellent pour les données historiques rarement référencées. Les tables ne sont pas indexées et la compression se produit lors de l'insertion. Les transactions ne sont pas prises en charge. Utilisez ce moteur de stockage pour archiver et récupérer les données passées.
Fédéré : Ce moteur de stockage permet de créer une seule base de données logique locale en reliant plusieurs serveurs MySQL physiques différents. Aucune donnée n'est stockée sur le serveur local et les requêtes sont automatiquement exécutées sur le serveur distant respectif. Il est parfait pour les environnements de magasins de données distribués et peut considérablement améliorer les performances lors de l'utilisation de MySQL pour les rapports analytiques.
Désignation d'un moteur de stockage
Comment changer le moteur de stockage utilisé ?
Le moteur de stockage utilisé est établi lors de la création de la table. Comme indiqué précédemment, InnoDB est le moteur de stockage par défaut dans les versions 5.5 et supérieures de MySQL. Si vous souhaitez en utiliser un autre, il est préférable de le faire dans votre instruction CREATE TABLE. Par exemple, disons que vous avez identifié une table qui doit utiliser le moteur de stockage CSV. Votre instruction CREATE TABLE trop simplifiée pourrait ressembler à ceci :
mysql> CREATE TABLE Shared_Data (
-> Data_ID ENTIER NON NULL,
-> Nom VARCHAR(50) NOT NULL,
-> Description VARCHAR(150)
-> ) ENGINE='CSV' ;
Après quoi, nous effectuerions une instruction INSERT comme d'habitude :
mysql> INSERT INTO Shared_Data VALUES
-> (1,'appareil un', 'la dernière version de la meilleure technologie'),
-> (2,'appareil deux', 'le plus rapide du marché');
En cas de succès, si vous inspectez le répertoire de la base de données, il devrait maintenant y avoir un fichier "Shared_Data.CSV" qui contient les enregistrements que vous avez insérés dans la table Shared_Data.
La même méthodologie peut être utilisée pour n'importe lequel des nombreux moteurs de stockage pris en charge par MySQL. Bien qu'il soit possible de changer le moteur de stockage après la création d'une table avec un ALTER TABLE
énoncé, il est préférable de planifier en conséquence et de le définir au début.
En conclusion
MySQL propose de nombreuses options
Comme vous pouvez le voir, MySQL offre un support pour les moteurs de stockage conçus pour gérer des tâches très différentes dans de nombreux environnements différents. Identifier les moteurs à utiliser et quand les utiliser peut nous aider à éviter des complications inutiles et des problèmes de performances à mesure que nos applications évoluent.
Que vous ayez besoin d'une disponibilité et d'une fiabilité de 99,999 % sur votre cluster informatique distribué ou que vous ayez besoin d'une prise en charge des transactions conforme à ACID avec des contraintes FOREIGN KEY, MySQL dispose d'un moteur de stockage adapté à vos besoins.
Comme toujours, une planification et une identification appropriées des objectifs et des exigences de votre projet constituent le meilleur moyen d'identifier avec précision les moteurs de stockage les mieux adaptés à votre application. J'espère que cet article servira de point de départ utile pour vous aider à cet égard.
Cet article a été initialement publié ici. Republié avec autorisation. Soumettez vos réclamations pour atteinte aux droits d'auteur ici.