MariaDB Server est à l'origine dérivé de MySQL et a donc hérité de son architecture de moteur de stockage enfichable. Différents moteurs de stockage ont des caractéristiques différentes en termes de performances mais aussi de fonctionnalités et de possibilités. Cela permet aux utilisateurs de choisir le bon outil pour le travail au lieu d'utiliser le même moteur de stockage, quel que soit le but des données, quelles sont les exigences concernant le stockage des données et comment les données doivent être accessibles. Dans cet article de blog, nous aimerions examiner les options disponibles dans MariaDB et discuter des cas d'utilisation potentiels des différents moteurs de stockage disponibles.
Qu'est-ce qu'un moteur de stockage ?
Tout d'abord, examinons ce qu'est le moteur de stockage ? MariaDB se compose de plusieurs couches qui fonctionnent ensemble. SQL est analysé par l'un d'eux, puis MariaDB recherche les données à l'aide d'une API commune. Sous le capot se trouve un moteur de stockage qui contient les données et qui réagit aux demandes de données, extrait les données et les met à disposition de MariaDB.
En bref, MariaDB envoie une requête pour une ligne et c'est au moteur de stockage de la récupérer et de la renvoyer. MariaDB ne se soucie pas de savoir exactement comment la ligne est stockée ou comment elle va être récupérée, tout dépend de l'implémentation dans le moteur de stockage. Les moteurs de stockage peuvent également implémenter différentes fonctionnalités. Les transactions sont également entièrement gérées du côté du moteur de stockage. C'est pourquoi certaines des transactions de soutien et d'autres non. Avec cette architecture, il est possible d'écrire différents moteurs de stockage, dédiés à la résolution de différents problèmes.
Moteurs de stockage dans MariaDB Server
MariaDB est livré avec un ensemble de moteurs de stockage. Vous pouvez vérifier lesquels sont disponibles via une simple commande :
MariaDB [(none)]> SHOW STORAGE ENGINES;
+--------------------+---------+-------------------------------------------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+-------------------------------------------------------------------------------------------------+--------------+------+------------+
| MRG_MyISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| CSV | YES | Stores tables as CSV files | NO | NO | NO |
| Aria | YES | Crash-safe tables with MyISAM heritage. Used for internal temporary tables and privilege tables | NO | NO | NO |
| SEQUENCE | YES | Generated tables filled with sequential values | YES | NO | YES |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| MyISAM | YES | Non-transactional engine with good performance and small data footprint | NO | NO | NO |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, foreign keys and encryption for tables | YES | YES | YES |
+--------------------+---------+-------------------------------------------------------------------------------------------------+--------------+------+------------+
8 rows in set (0.000 sec)
Comme vous pouvez le voir, ils sont nombreux, nous aborderons les plus importants.
InnoDB
InnoDB est évidemment LE moteur de stockage. Le transactionnel, conçu pour gérer le trafic OLTP, peut fournir de très bonnes performances. C'est le moteur par défaut utilisé dans MariaDB et, à moins que vous ne sachiez ce que vous faites, vous voudrez probablement vous y tenir pour votre base de données.
MonISAM
MyISAM est l'un des moteurs de stockage "originaux" disponibles dans MySQL puis MariaDB. Il n'est pas transactionnel, ce qui le rend pas idéal pour les configurations de réplication et, bien, la plupart des autres environnements également. Il s'agit toujours d'un moteur très rapide, en particulier en ce qui concerne l'accès aux index, ce qui le rend adapté aux charges de travail en lecture seule qui ne seront pas affectées par le verrouillage des INSERT et la fragilité globale de MyISAM.
Aria
Aria est un moteur créé pour MariaDB en remplacement de MyISAM. Ce n'est pas transactionnel, mais il est sécurisé contre les pannes, ce qui le rend beaucoup plus fiable. Actuellement, il est utilisé pour les tables système et temporaires, mais il peut également être utilisé à la place de MyISAM pour les charges de travail nécessitant un accès rapide et en lecture seule aux données.
Mémoire
Il s'agit d'un moteur tout en mémoire généralement utilisé pour les tables temporaires en mémoire. Il n'est pas persistant, mais peut fonctionner pour certaines charges de travail en lecture seule.
CSV
Ce moteur de stockage est conçu pour stocker des données dans un fichier sous forme de valeurs séparées par des virgules. Ce n'est pas le moteur de stockage le plus utilisé, il est très spécialisé mais il peut toujours être utilisé pour extraire facilement des données de MariaDB dans n'importe quel autre logiciel de base de données ainsi qu'Excel ou un logiciel similaire.
Moteurs de stockage dans MariaDB Enterprise Server
MariaDB Enterprise Server est livré avec quelques moteurs de stockage supplémentaires par rapport à ce qui est disponible dans l'édition communautaire. Examinons-les également.
ColumnStore
Il s'agit d'un moteur de stockage dédié à la charge de travail analytique. Grâce à la manière spécifique de stocker les données, il est plus rapide de récupérer de gros volumes de données, fréquemment nécessaires pour les rapports. Il peut s'agir du moteur de stockage de votre choix pour les charges de travail OLAP (OnLine Analytical Processing).
S3
Le moteur S3 vous permet d'accéder aux données situées dans S3. Il s'agit d'un moteur non transactionnel destiné à donner aux utilisateurs la possibilité d'archiver des données dans le S3. L'accès en lecture seule est disponible après la création de la table.
Araignée
Le moteur Spider vous permet de connecter plusieurs bases de données MariaDB sur le réseau, créant ainsi un stockage partagé. Il est transactionnel et facilite l'évolution des utilisateurs en répartissant les données sur de nombreux serveurs MariaDB Enterprise, en répartissant le trafic et la charge de travail entre eux.
Mes Rochers
MyRocks est un moteur de stockage développé dans Facebook, il est destiné à réduire l'amplification en écriture et à minimiser l'usure des disques SSD. Il s'agit d'un moteur transactionnel qui devrait assez bien gérer la charge de travail OLTP, en particulier les charges de travail typiques des sites Web de médias sociaux. MyRocks est livré avec une assez bonne compression, meilleure qu'InnoDB, ce qui peut aider à réduire considérablement les dépenses de stockage si l'ensemble de données devient trop volumineux pour qu'InnoDB puisse le gérer correctement.
Conclusion
Comme vous pouvez le voir, il existe de nombreuses options fournies par MariaDB Enterprise et Community Server concernant la manière dont les données peuvent être stockées. Il existe des moteurs de stockage qui excellent dans les charges de travail en lecture seule, OLAP ou les grands ensembles de données. C'est à l'utilisateur de choisir un bon ajustement. N'oubliez pas qu'en cas de doute, vous pouvez toujours vous en tenir à InnoDB, qui offre de très bonnes performances en général et devrait être plus que suffisant pour la majorité des cas. C'est pour les cas extrêmes où vous devrez peut-être chercher quelque chose de plus approprié.