InnoDB : le meilleur moteur de stockage pour MySQL ?

Lorsqu’un site volumineux fonctionne lentement, le problème vient souvent d’une base de données non optimisée. Une place pour chaque chose, chaque chose à sa place : une maxime qui vaut aussi pour le numérique. Si le contenu se développe en permanence, il faut recourir à un système de gestion de base de données adapté, ou SGBD. Un SGBD bien connu, MySQL, permet de travailler, de classer et de stocker à long terme et en toute simplicité de grandes quantités de données.

InnoDB joue un rôle très important pour stocker des données dans MySQL. InnoDB est un sous-système de stockage qui s’est distingué, ces dernières années, pour ses performances et sa fiabilité supérieures à ses concurrents. Dans cet article, nous vous présentons InnoDB, ses inconvénients et ses différences avec le moteur de stockage MyISAM.

IONOS Cloud Compute Engine

Les moyennes et grandes entreprises choisissent le Cloud Made in Germany. IaaS et PaaS du champion caché aux champions cachés.

Sûr
Fiable
Flexible

Qu’est-ce que InnoDB ?

À l’origine un simple moteur de stockage, InnoDB a fini par devenir un véritable moteur de stockage polyvalent pour MySQL. Au vu de sa grande fiabilité et de ses performances élevées, MySQL en a fait son moteur de stockage par défaut à partir de sa version 5.6.

Note

MySQL est une base de données open source compatible avec différents moteurs de stockage. Cette base de données est donc flexible pour l’hébergement de sites Internet. Outre InnoDB et son prédécesseur officiel MyISAM, il existe d’autres moteurs, comme par exemple BerkeleyDB, CSV, NDB et Federated Engine.

En tant que système de gestion de base de données, MySQL a pour but d’enregistrer, d’indexer et d’interroger des données dans une table. Lorsqu’on a besoin de lire et d’inscrire de petites quantités de données en grand nombre, comme pour un site Internet ou une application, ou bien de modifier des données avec des transactions sûres, MySQL apporte une solution adaptée. Grâce à InnoDB, ce logiciel bénéficie du moteur de stockage adapté, qui se comporte comme un module et peut s’intégrer de manière flexible. Cependant, c’est toujours MySQL qui précise comment les données d’une base de données doivent être sauvegardées.

Note

Les bases de données se composent de tables qui, au moment de leur création, sont allouées par un moteur de stockage défini, à l’instar d’InnoDB.

La plupart des moteurs de stockage enregistrent les données sur un support de données ou, pour un accès plus rapide, dans une mémoire centrale. InnoDB permet d’exécuter des transactions de données isolées les unes des autres : c’est uniquement lorsqu’une transaction est terminée qu’elle est inscrite sur le support de données correspondant. Cette procédure évite tout accès incomplet dans une base de données existante.

Note

Les transactions sont des paquets de données de plusieurs opérations indissociables. Lorsqu’une opération ne peut pas être exécutée, l’ensemble de la transaction échoue. Pour y remédier, il faut non seulement annuler l’opération erronée, mais aussi toutes les opérations précédentes. Ce processus demande plus de temps que de simples opérations, mais c’est le seul moyen de garantir la cohérence de la base de données.

Pourquoi MySQL utilise InnoDB ?

Chaque table InnoDB organise les données sur le support de données. L’accès ralentit un peu, mais devient nettement plus sûr, car chaque table est optimisée à l’aide d’une clé primaire. La sélection des données est relativement plus rapide, tandis que l’ajout et l’actualisation prennent plus de temps. C’est la raison pour laquelle on recommande le moteur de stockage InnoDB pour MySQL essentiellement pour les grosses bases de données et, notamment, lorsque de nombreuses données sont liées les unes aux autres.

Comme évoqué, avec InnoDB, les données d’une transaction sont reliées les unes aux autres. Lorsque des données sont supprimées, InnoDb supprime automatiquement toutes les données associées. Il est d’autant plus simple pour l’utilisateur de maintenir l’intégrité référentielle de la base de données. Cette intégrité référentielle doit être impérativement définie au préalable, sans quoi elle ne sera pas automatiquement préservée. On peut ainsi verrouiller, par exemple, l’accès en écriture à des paquets de données.

La structure des tables d’InnoDB est sauvegardée dans des fichiers frm, les données exploitées et les index dans un espace de tables relié à la base de données, qui peut être réparti dans un ou plusieurs fichiers. L’intégrité référentielle s’impose ici aussi : la configuration de l’espace des tables peut être répartie dans plusieurs répertoires, mais elle doit être spécifiée au début du travail et ne peut pas être modifiée ultérieurement. Travailler sur une table InnoDB s’apparente à travailler sur la partition d’un disque dur, où les modifications ultérieures peuvent entraîner une perte de données.

Le système le plus connu s’appuyant sur InnoDB est mediawiki, un logiciel qui, entre autre, constitue la base du site Internet Wikipédia.

Note

Avoir un système de base de données adapté est une des conditions les plus importantes pour bien exploiter une application Web. Avec les solutions d’hébergement Web de IONOS, vous profitez d’une base de données puissante et performante dans un pack conçu sur mesure, avec un espace en ligne, de la mémoire vive et votre propre nom de domaine !

Quels sont les avantages et les inconvénients du système MySQL/InnoDB ?

En principe, InnoDB est plus récent et plus moderne que les autres moteurs de stockage MySQL. Ce moteur est aussi plus complexe et demande un environnement de base de données nettement plus puissant. Cependant, comme les applications Web deviennent de plus en plus complexes, les exploitants se voient de plus en plus recommander les possibilités (transactions, clés étrangères) que propose MySQL avec InnoDB : tous les processus d’un site Internet reposent sur la lecture des contenus d’une base de données. Certes, avec InnoDB, le temps de réaction peut ralentir (notamment lorsque les entrées sont actualisées ou lorsque l’on ajoute de nouveaux articles). Pourtant, le critère décisif, à savoir l’affichage des nouveaux contenus côté utilisateur, est nettement plus rapide.

Les avantages et les inconvénients d’InnoDB s’équilibrent lorsqu’il est utilisé pour un site Internet commun et moderne. Dans le cas d’une boutique en ligne, cette solution atteint vite ses limites : le système de commande implique de nombreux accès en écriture. Le système de verrouillage protégé en écriture d’InnoDB n’est donc pas pertinent. À l’inverse, dans ce contexte, on utilisera plutôt des tables qui gèrent mieux les accès en écriture, comme MyISAM.

Le point le plus important, et de loin, quand MySQL utilise InnoDB : toute modification erronée à l’intérieur de la base de données peut entraîner le plantage complet du site. Avant chaque modification, il faut donc faire une sauvegarde de la base de données existante. InnoDB utilise un protocole de transaction spécifiquement conçu qui, en cas d’erreur, lance automatiquement la restauration.

Quelles différences entre InnoDB et MyISAM ?

Depuis sa version 5, MySQL supporte plus de dix moteurs de stockage différents, dont le plus connu est MyISAM. Ce moteur enregistre les données de chaque table dans deux fichiers différents, un pour les fichiers, un pour l’index. ISAM signifie Indexed Sequential Access Method (méthode d’accès séquentielle indexée) : il est impossible que plusieurs utilisateurs ou applications écrivent dans une table en même temps. L’enregistrement séquentiel autorise une seule application à accéder en écriture. Cependant, cette même table peut être lue par plusieurs utilisateurs en même temps. Lorsqu’il faut faire lire une grande quantité de petits paquets de données rapidement et à plusieurs applications en même temps, MyISAM est imbattable.

InnoDB respecte la norme ACID (Atomicity Consistency Isolation Durability). Toutes les transactions s’effectuent isolées les unes des autres, mais il est possible, si nécessaire, que plusieurs applications inscrivent des données en même temps dans une même table. Lors de l’interrogation des données, la transaction SELECT, InnoDB est clairement supérieur ; en revanche, pour l’accès en écriture à une base de données, les transactions INSERT et UPDATE, MyISAM est légèrement plus rapide. InnoDB compense largement sa vitesse moindre par son protocole de transaction. MyISAM ne dispose d’aucune restauration automatique en cas d’erreur : il faut donc toujours faire un back-up avant de modifier la base de données.

En résumé

Le moteur de stockage InnoDB n’est pas toujours le remplaçant idéal de MyISAM. Dès que le projet, et notamment l’ensemble de données, gagne en volume et en complexité, InnoDB est tout indiqué pour MySQL. Pour les bases de données plus restreintes, comme c’est le cas des applications, MyISAM est nettement plus performant. Bien utilisées, ces solutions ne nous mettent pas face à un choix cornélien. Si nécessaire, on peut aussi utiliser les deux modules en parallèle dans une même base de données.