MySQL (analyse InnoDB): --- Moteur de stockage MySQL et comparaison, vue (afficher les moteurs)

Un, moteur de stockage

  • Dans l'article précédent, j'ai découvert l' architecture de plug-in unique de la base de données MySQL et j'ai appris que le moteur de stockage est l'une des fonctionnalités les plus importantes qui distinguent MySQL des autres bases de données. L'avantage du moteur de stockage est que chaque moteur de stockage a ses propres caractéristiques et peut établir différentes tables de moteur de stockage en fonction d'applications spécifiques.
  • En raison de la fonctionnalité open source de la base de données MySQL, les utilisateurs peuvent écrire leur propre moteur de stockage basé sur l'interface de moteur de stockage prédéfinie de MySQL . Si les utilisateurs ne sont pas satisfaits des performances ou de la fonction d'un certain moteur de stockage, ils peuvent modifier le code source pour obtenir les fonctionnalités souhaitées. C'est la commodité et la puissance que nous apporte l'open source. Par exemple, l'ingénieur d'eBay Igor Chernyshev a amélioré le moteur de stockage de la mémoire MySQL ( http://code.google.com/p/mysql-heap-dynamic-rows/ ) et l'a appliqué à la plateforme de personnalisation d'eBay. Des modifications similaires incluent Google et Facebook et d'autres entreprises. Bien entendu, le moteur de stockage fourni par la base de données MySQL elle-même est suffisant pour répondre aux besoins de la plupart des applications .

Classification des moteurs de stockage

  • En raison de la fonctionnalité open source de la base de données MySQL, le moteur de stockage peut être divisé en moteur de stockage officiel MySQL et moteur de stockage tiers
  • Certains moteurs de stockage tiers sont très puissants, comme le célèbre moteur de stockage InnoDB (premier moteur de stockage tiers, acquis plus tard par Oracle), et ses applications sont extrêmement larges, même dans la base de données MySQL OLTP (Online Transaction Processing) applications Le moteur de stockage le plus complet. Là encore, les utilisateurs doivent choisir un moteur de stockage approprié en fonction de l'application spécifique. Voici une brève introduction à certains moteurs de stockage auxquels les lecteurs peuvent se référer lorsqu'ils choisissent un moteur de stockage.

Deux, moteur de stockage InnoDB

  • Le moteur de stockage InnoDB prend en charge les transactions et son objectif de conception est principalement destiné aux applications de traitement des transactions en ligne (OLTP). Ses caractéristiques sont la conception du verrou de ligne, la prise en charge des clés étrangères et la prise en charge de la lecture non verrouillable similaire à Oracle, c'est-à-dire que l'opération de lecture par défaut ne génère pas de verrous . À partir de la base de données MySQL version 5.5.8, le moteur de stockage InnoDB est le moteur de stockage par défaut.
  • Le moteur de stockage InnoDB place les données dans un espace table logique (.ibd) , qui est géré par le moteur de stockage InnoDB lui-même comme une boîte noire. À partir de MySQL 4.1 (y compris 4.1), il peut stocker les tables de chaque moteur de stockage InnoDB séparément dans un fichier ibd distinct. De plus, le moteur de stockage InnoDB prend en charge l'utilisation d'un périphérique brut (disque de ligne) pour créer son espace table.
  • InnoDB obtient une concurrence élevée grâce à l' utilisation du contrôle d'accès concurrentiel multi-version (MVCC) , et implémente les quatre niveaux d'isolation du standard SQL , la valeur par défaut est le niveau REPEATABLE. Dans le même temps, une stratégie appelée verrouillage de la clé suivante est utilisée pour éviter l'apparition d'un fantôme . En outre, le moteur de stockage InnoDB offre également des performances et une disponibilité élevées telles que le tampon d'insertion, la double écriture, l'index de hachage adaptatif, la lecture anticipée, etc.
  • Pour le stockage des données dans la table, le moteur de stockage InnoDB utilise une méthode en cluster , de sorte que le stockage de chaque table est stocké dans l'ordre de la clé primaire . Si la clé primaire n'est pas explicitement spécifiée dans la définition de la table, le moteur de stockage InnoDB générera un ROWID de 6 octets pour chaque ligne et l'utilisera comme clé primaire.
  • Le moteur de stockage InnoDB est le moteur le plus couramment utilisé pour les bases de données MySQL et Facebook, Google, Yahoo! Les applications réussies d'autres entreprises ont prouvé la haute disponibilité, les hautes performances et la grande évolutivité du moteur de stockage InnoDB.
  • Les fichiers pris en charge par InnoDB sont :

Troisièmement, le moteur de stockage MyISAM

  • Le moteur MyISAM ne supporte pas les transactions et la conception de verrouillage de la table et des supports d' indexation en texte intégral . Il est principalement pour certaines applications de bases de données OLAP. Avant MySQL 5.5.8, le moteur de stockage MyISAM était le moteur de stockage par défaut (à l'exception de la version Windows). Une grande différence entre un système de base de données et un système de fichiers est la prise en charge des transactions. Cependant, le moteur de stockage MyISAM ne prend pas en charge les transactions. À la base, ce n'est pas difficile à comprendre. Imaginez si les utilisateurs ont besoin de transactions dans toutes les applications? Dans l'entrepôt de données, s'il n'y a pas d'opérations telles que ETL, une simple requête de rapport nécessite-t-elle toujours une prise en charge des transactions? En outre, une autre différence du moteur de stockage MyISAM est que son pool de mémoire tampon ne met en cache que les fichiers d'index, pas les fichiers de données , ce qui est très différent de la plupart des bases de données.
  • MyIASM ne prend pas en charge les transactions et son "prend uniquement en charge les verrous au niveau de la table, ne prend pas en charge les verrous au niveau des lignes" a beaucoup à faire

  • La table du moteur de stockage MyISAM est composée de MYD et MYI . MYD est utilisé pour stocker les fichiers de données et MYI est utilisé pour stocker les fichiers d'index . Le fichier de données peut être davantage compressé à l'aide de l'outil myisampack, car l'outil myisampack utilise l'algorithme de codage statique de Huffman (Huffman) pour compresser les données, de sorte que la table compressée avec l'outil myisampack est en lecture seule. Bien sûr, les utilisateurs peuvent également décompressez les données via le fichier myisampack.
  • Avant MySQL 5.0, MyISAM prenait en charge une taille de table de 4 Go par défaut. Si vous devez prendre en charge des tables MyISAM de plus de 4 Go, vous devez spécifier les attributs MAX_ROWS et AVG_ROW_LENGTH. À partir de MySQL 5.0, MyISAM prend en charge 256 To de données à table unique par défaut , ce qui est suffisant pour répondre aux exigences générales des applications.
  • Les fichiers pris en charge par MyISAM sont :

Remarque

  • Pour les tables du moteur de stockage MyISAM, la base de données MySQL met uniquement en cache ses fichiers d'index et les fichiers de données sont mis en cache par le système d'exploitation lui - même , ce qui est très différent de la plupart des autres bases de données qui utilisent l'algorithme LRU pour mettre en cache les données. De plus, avant MySQL version 5.1.23, que ce soit dans un environnement de système d'exploitation 32 bits ou 64 bits, la mémoire tampon maximale de l'index de cache ne peut être définie que sur 4 Go. Dans les versions ultérieures, les systèmes 64 bits peuvent prendre en charge des tampons d'index de plus de 4 Go

Quatre, moteur de stockage NDB

  • En 2003, MySQL AB a acquis le moteur de cluster NDB de Sony Ericsson . Le moteur de stockage NDB est un moteur de stockage en cluster, similaire au cluster RAC d'Oracle, mais différent de l'architecture de tout partage d'Oracle RAC, sa structure est une architecture de cluster sans partage , de sorte qu'il peut fournir une plus grande disponibilité . La caractéristique de NDB est que toutes les données sont stockées en mémoire partir de MySQL 5.1, les données non indexées peuvent être stockées sur disque), de sorte que la vitesse de recherche de la clé primaire est extrêmement rapide et que les performances de la base de données peuvent être améliorées de manière linéaire en ajoutant NDB nœuds de stockage de données . Il s’agit d’un système de cluster hautement disponible et performant
  • En ce qui concerne le moteur de stockage NDB, il y a un problème à noter, c'est-à-dire que l'opération de connexion (JOIN) du moteur de stockage NDB est terminée au niveau de la couche de base de données MySQL , et non au niveau de la couche du moteur de stockage. Cela signifie que les opérations de connexion complexes nécessitent une surcharge réseau énorme, de sorte que la vitesse de requête est très lente . Si ce problème est résolu, le marché des moteurs de stockage NDB devrait être très énorme

Remarque

  • Le moteur de stockage MySQL NDB Cluster est disponible dans une version communautaire et une version entreprise , et NDB Cluster existe en tant que version de téléchargement distincte de l'édition Carrier Grade. La dernière version peut être obtenue sur http://dev.mysql.com/ téléchargements / cluster / index.html Moteur de stockage de cluster NDB

Cinq, moteur de stockage de mémoire

  • Le moteur de stockage de la mémoire (précédemment appelé moteur de stockage HEAP) stocke les données dans la table en mémoire. Si la base de données redémarre ou tombe en panne, les données de la table disparaissent . Il convient parfaitement aux tables temporaires pour stocker des données temporaires, ainsi qu'aux tables de latitude dans les entrepôts de données . Moteur de stockage de mémoire utilisé par l'index de hachage par défaut , plutôt que l'index d'arborescence B + familier
  • Bien que le moteur de stockage de la mémoire soit très rapide, il a encore certaines limitations dans son utilisation. Par exemple, seuls les verrous de table sont pris en charge, les performances d'accès concurrentiel sont médiocres et les types de colonnes TEXT et BLOB ne sont pas pris en charge . Le plus important est que le stockage des champs de longueur variable (varchar) se fait à la manière de champs constants (char), donc de la mémoire sera gaspillée (ce problème a déjà été mentionné, l'ingénieur eBay Igor Chernyshev a déjà donné une solution de correctif) .
  • De plus, il est facile d'oublier que la base de données MySQL utilise le moteur de stockage Memory comme table temporaire pour stocker le jeu de résultats intermédiaire de la requête (résultat intermédiaire). Si le résultat intermédiaire est supérieur au moteur de stockage de la table de configuration de la capacité mémoire définie , ou au résultat intermédiaire comprenant le champ de type de colonne TEXT ou BLOB, la base de données MySQL sera convertie en tables du moteur de stockage MyISAM stockées sur le disque dans . Comme mentionné précédemment, MyISAM ne met pas en cache les fichiers de données, de sorte que les performances de la table temporaire générée à ce moment seront perdues pour la requête

Six, moteur de stockage d'archives

  • Le moteur de stockage Archive ne prend en charge que les opérations INSERT et SELECT , et les index sont pris en charge à partir de MySQL 5.1 . Le moteur de stockage Archive utilise l'algorithme zlib pour compresser les lignes de données et les stocker, et le taux de compression est généralement jusqu'à 1:10. Comme son nom l'indique, le moteur de stockage Archive convient parfaitement au stockage de données archivées, telles que les informations de journal . Le moteur de stockage Archive utilise des verrous de ligne pour implémenter des opérations d'insertion hautement simultanées , mais il n'est pas lui-même un moteur de stockage sécurisé pour les transactions.

Seven, moteur de stockage fédéré

  • La table du moteur de stockage fédéré ne stocke pas de données , elle pointe simplement vers une table sur un serveur de base de données MySQL distant. Ceci est très similaire au serveur lié de SQL Server et à la passerelle transparente d'Oracle. La différence est que le moteur de stockage fédéré actuel ne prend en charge que les tables de base de données MySQL et non les tables de base de données hétérogènes.

Huit, moteur de stockage Maria

  • Le moteur de stockage Maria est un moteur nouvellement développé, dont l'objectif de conception est de remplacer le moteur de stockage d'origine MyISAM et de devenir le moteur de stockage par défaut pour MySQL. Le développeur du moteur de stockage Maria est Michael Widenius, l'un des fondateurs de MySQL. Par conséquent, il peut être considéré comme une version de suivi de MyISAM. Les caractéristiques du moteur de stockage Maria sont les suivantes: prise en charge de la mise en cache des données et des fichiers d'index, application de la conception du verrou de ligne, fourniture de la fonction MVCC, prise en charge des options de sécurité de transaction et de non-transaction, et meilleures performances de traitement des types de caractères BLOB

Neuf, autres moteurs de stockage

  • Outre les 7 moteurs de stockage mentionnés ci-dessus, la base de données MySQL possède de nombreux autres moteurs de stockage, notamment Merge, CSV, Sphinx et Infobright . Ils ont tous leurs propres cas d'utilisation, je ne les présenterai donc pas un par un ici.
  • Après avoir compris que la base de données MySQL a autant de moteurs de stockage, les doutes suivants peuvent être résolus:
    • Pourquoi la base de données MySQL ne prend-elle pas en charge l'indexation de texte intégral? Ne pas! MySQL prend en charge, MyISAM, InnoDB (version 1.2) et les moteurs de stockage Sphinx prennent tous en charge l'indexation de texte intégral.
    • MySQL est-il rapide car il ne prend pas en charge les transactions? mal! Bien que le moteur de stockage MyISAM de MySQL ne prenne pas en charge les transactions, InnoDB le fait. "Rapide" est relatif aux différentes applications. Pour les opérations ETL, MyISAM a ses avantages, mais dans un environnement OLTP, le moteur de stockage InnoDB est plus efficace.
    • Les performances de MySQL diminueront-elles considérablement lorsque la quantité de données dans la table sera supérieure à 10 millions? Ne pas! MySQL est une base de données, pas un fichier. À mesure que le nombre de lignes de données augmente, les performances diminuent bien sûr, mais ces baisses ne sont pas linéaires. Si l'utilisateur choisit le moteur de stockage et la configuration appropriés, quelle que soit la quantité de données MySQL , Peut supporter. Comme mentionné dans le manuel officiel, Mytrix et Inc. stockent plus de 1 To de données sur InnoDB, et certains autres sites Web utilisent le moteur de stockage InnoDB, traitant les opérations d'insertion / mise à jour en moyenne 800 fois par seconde.

10. Comparaison entre les moteurs de stockage

Icône

  • L'image suivante est tirée du manuel officiel de MySQL. Le contenu de la comparaison comprend: les restrictions du conteneur de stockage, la prise en charge des transactions, la granularité des verrous, la prise en charge MVCC, les index pris en charge, la sauvegarde et la réplication, etc.

11. Afficher les moteurs de stockage pris en charge par la base de données actuelle

  • Vous pouvez afficher le moteur de stockage actuellement utilisé par MySQL via l'instruction SHOW ENGINES, ou vous pouvez rechercher la table ENGINES dans le fichier information_schema

 

Je suppose que tu aimes

Origine blog.csdn.net/m0_46405589/article/details/113823544
conseillé
Classement