Maison  >  Article  >  base de données  >  Parlons de l'architecture logique MySQL

Parlons de l'architecture logique MySQL

WBOY
WBOYavant
2022-03-15 17:36:262073parcourir

Cet article vous apporte des connaissances pertinentes sur mysql, qui présente principalement les problèmes liés à l'architecture logique mysql. L'architecture est grossièrement divisée en trois couches, qui sont utilisées pour le traitement des threads de connexion et contiennent la plupart des services de base de mysql. moteur de stockage, j'espère qu'il sera utile à tout le monde.

Parlons de l'architecture logique MySQL

Apprentissage recommandé : Tutoriel d'apprentissage mysql

Architecture logique MySQL (environ divisée en trois couches)

Première couche : traitement des threads de connexion

  • Client -> authentification, sécurité)

Les services inclus ne sont pas uniques à MySQL. Ils servent tous des programmes C/S ou ce dont ces programmes ont besoin (traitement de connexion, authentification d'autorisation, sécurité, etc.)

Deuxième couche : contient la plupart des éléments. Services de base mysql

  • Cache de requêtes——>Parseur——>Optimiseur——>Exécuter la requête

Cache de requêtes, analyse, analyse, optimisation, mise en cache, toutes les fonctions intégrées (date, heure, mathématiques et fonctions de chiffrement) en même temps, toutes les fonctions fournies par le moteur de stockage sont concentrées dans cette couche (procédures stockées, déclencheurs, vues)

Processus : analyser la requête Avant, vous devez d'abord interroger le cache. enregistrez les informations de la requête et les données de résultat. Si une requête existe dans le cache, il n'est pas nécessaire d'analyser, d'optimiser et d'exécuter la requête. Les résultats de la requête stockés dans le cache seront renvoyés directement

Troisième couche : contient le stockage. moteur

  • Le moteur de stockage est responsable du stockage et de la récupération des données dans mysql (similaire au système de fichiers sous Linux)

Chaque moteur de stockage a des avantages et des inconvénients, et des services intermédiaires La couche communique avec le stockage moteur via des API. Ces interfaces API masquent les différences entre les différents moteurs de stockage et rendent la couche de requête aussi transparente que possible.

L'API du moteur de stockage contient plus d'une douzaine de fonctions de bas niveau, telles que l'exécution de "démarrer une transaction" ou la récupération de lignes avec des clés primaires spécifiques, mais le moteur de stockage n'analyse généralement pas SQL (InnoDB analysera les définitions de clés étrangères car lui-même Si cette fonction n'est pas implémentée), les différents moteurs de stockage ne communiqueront pas entre eux, mais répondront simplement aux requêtes du serveur de couche supérieure.

Architecture logique MySQL - introduction détaillée (divisée en huit étapes)

1. Les connecteurs

  • font référence à l'interaction avec SQL dans différentes prédictions

Nactive C API, JDBC, ODBC, PHP. , Python, Perl, Ruby, VB

2. Services et utilitaires de gestion d'entreprise

  • Outils de gestion et de contrôle du système

Sauvegarde et récupération, sécurité, réplication, cluster, partitionnement, gestionnaire d'instance, INPORMATICN_SCHEMA, administrateur , Workbench, Query Browser, Migration Toolkit

3. Le pool de connexions

  • gère la mise en mémoire tampon des connexions utilisateur, le traitement des threads et d'autres besoins nécessitant une mise en cache.

  • Responsable de la surveillance de diverses requêtes au serveur MySQL, de l'acceptation des demandes de connexion et de la transmission de toutes les demandes de connexion au module de gestion des threads.

  • Chaque demande client connectée au serveur MySQL se verra attribuer (créée) un thread de connexion pour le servir séparément, et le thread de connexion est mis en cache, il n'est donc pas nécessaire de créer et de détruire chaque connexion client séparément. le thread de connexion doit communiquer entre le serveur MySQL et le client, recevoir les demandes de commande du client et transmettre les informations de résultat du serveur. Le module de gestion des threads est responsable de la gestion et de la maintenance de ces threads de connexion, y compris la création de threads, le cache de threads, etc. .

Authentification -Réutilisation des threads - Limites de connexion - Vérifier la mémoire -Caches

4.Interface SQL (interface SQL)

  • Accepte la commande SQL de l'utilisateur et renvoie les résultats que l'utilisateur doit interroger. Par exemple, sélectionnez parmi pour appeler l'interface SQL

DML, DDL, procédures stockées, vues, déclencheurs, etc

5.Parser (analyseur)

  • Lorsque la commande SQL est transmise à l'analyseur, elle sera vérifié et analysé par l'analyseur, l'analyseur Il est implémenté par Lex et YACC. Dans MySQL, nous avons l'habitude d'appeler toutes les commandes envoyées par le client côté serveur, appelées requêtes. une fois que le fil de connexion reçoit une requête du client, il transmettra la requête directement au module chargé de classer les différentes requêtes, puis les transmettra aux modules de traitement correspondants

Fonctions principales :

  • a. Effectuez une analyse sémantique et syntaxique des instructions SQL, décomposez-les en structures de données, puis classez-les selon le même type d'opération et effectuez un transfert ciblé vers les étapes suivantes. La livraison et le traitement ultérieurs des instructions SQL seront basés sur. cette structure.

  • b. Si une erreur est rencontrée dans la décomposition, cela signifie que l'instruction SQL est déraisonnable

Traduction de requête, privilège d'objet

6. l'instruction est interrogée, l'optimiseur de requête est utilisé pour optimiser la requête, c'est-à-dire optimiser la requête de requête du client sur la base de l'instruction de requête demandée par le client et de certaines informations statistiques dans la base de données, elle est analysée sur la base d'une série d'algorithmes. pour obtenir une stratégie optimale, indique au programme suivant comment obtenir le résultat de cette instruction de requête, en utilisant la stratégie "select-projection-join" pour la requête ;
Par exemple : sélectionnez uid, nom de l'utilisateur où sexe =1;
Cette instruction de requête sélectionne d'abord en fonction de l'instruction après où, au lieu d'interroger d'abord toutes les tables, puis de filtrer le sexe, puis effectue une projection d'attribut basée sur l'uid et le nom, au lieu de supprimer tous les attributs, puis effectuer un filtre, et enfin connecter ces deux conditions de requête pour générer le résultat final de la requête

Chemins d'accès, statistiques

7.Cache et tampon (cache de requêtes)

La fonction principale est de soumettre le client au Sélectionnez la classe de Mysql L'ensemble de résultats renvoyé par la requête de requête est mis en cache en mémoire et correspond à une valeur de hachage de la requête. Après toute modification des données dans la table de base des données obtenues par la requête, MySQL invalidera automatiquement le cache de. la requête. Dans les systèmes d'application avec un taux d'écriture très élevé, Query Cache peut améliorer considérablement les performances, mais bien sûr, il consomme beaucoup de mémoire.
S'il existe un résultat de requête valide dans le cache de requêtes, l'instruction de requête peut extraire directement les données du cache de requêtes. Ce mécanisme de cache est composé d'une série de petits caches, tels que le cache de table et le cache d'enregistrement. , et cache de clés. , cache d'autorisations, etc.

Caches et tampons globaux et spécifiques au moteur

8. Moteurs de stockage enfichables (moteur de stockage enfichable)

    Interface du moteur de stockage : la caractéristique la plus importante de MySQL qui distingue à partir d'autres bases de données, il s'agit de son moteur de stockage de tables de plug-in.
  • L'architecture du moteur de stockage de plug-in MySQL fournit une série de normes de gestion et de support de services. Ces normes n'ont rien à voir avec le moteur de stockage lui-même et peuvent être nécessaires pour chaque système de base de données, tel que les analyseurs et optimiseurs SQL, etc. Le moteur de stockage est l'implémentation de la structure physique sous-jacente. Chaque développeur de moteur de stockage peut développer selon ses propres souhaits.
  • 9.file system

    Système de fichiers, données, index de journal (rétablir, annuler), journal d'erreurs, enregistrement de requête, requête lente, etc.
Remarque : le moteur de stockage est basé sur des tables , pas de base de données

Flux de travail de base de données

Établir une connexion TCP——>Vérifier l'utilisateur——>Créer un thread pour analyser SQL——>Générer un plan d'exécution——>Ouvrir la table——>Rechercher dans le tampon pour voir quoi dont vous avez besoin Que la page de données soit mise en cache——>Analyser les données à partir du disque——>Obtenir des données et écrire dans le pool de mémoire tampon——>Renvoyer les données au client——>Fermer la table——>Fermer le fil de discussion——> Fermer la connexion

    Couche supérieure : Connexion client
1. Traitement de la connexion : Le client établit une connexion TCP avec la couche de service de base de données. Le module de gestion des connexions établira la connexion et demandera un thread de connexion s'il y a. est un thread de connexion dans le pool de connexions. Les threads de connexion inactifs seront alloués à cette connexion. Sinon, créez un nouveau thread de connexion pour être responsable de ce client si le nombre maximum de connexions de threads n'est pas dépassé

2. l'opération de requête, l'utilisateur doit être appelé. Le module effectue une vérification d'autorisation pour vérifier si l'utilisateur a l'autorisation. Après l'avoir transmis, le service est fourni et le thread de connexion commence à accepter et à traiter l'instruction SQL du client. couche : service principal. 1. Fil de connexion Après avoir reçu l'instruction SQL, l'instruction est transmise au module d'analyse des instructions SQL pour l'analyse syntaxique et sémantique.

2. S'il s'agit d'une instruction de requête, vous pouvez d'abord vérifier s'il y a un résultat dans le cache de requête. S'il y a un résultat, il sera renvoyé directement au client.

3. S'il n'y a aucun résultat dans le cache de requête, vous devez interroger la couche du moteur de base de données et envoyer l'instruction SQL à l'optimiseur pour optimiser la requête. S'il s'agit d'un changement de table, la classification est transmise pour insertion, mettre à jour, supprimer, créer, traiter les alertes Module de traitement
  • La troisième couche : couche moteur de base de données

1. Ouvrez la table et obtenez le verrou correspondant si nécessaire.

2. Vérifiez d'abord s'il y a des données correspondantes dans la page de cache. S'il y en a, elles peuvent être renvoyées directement. Sinon, lisez-les à partir du disque.

3. seront chargés dans le cache pour rendre les requêtes ultérieures plus efficaces. En raison du cache limité, des tables LRU flexibles sont souvent utilisées pour gérer les pages du cache afin de garantir un accès fréquent aux données mises en cache.

    4. Enfin, après avoir obtenu les données, renvoyez-les au client, fermez la connexion et libérez le fil de connexion.

    Analyse FAQ

    1. Qu'est-ce qu'un moteur de stockage plug-in

    Un moteur de stockage lit et écrit des données sur le disque. Différents moteurs de stockage ont des opérations de lecture et d'écriture différentes, les transactions, les verrous, etc. Nous avons des besoins commerciaux différents, il y aura donc de nombreux moteurs de stockage dans une base de données, car le moteur de stockage est basé sur des tables, différentes tables peuvent avoir différents moteurs de stockage, permettant au moteur de stockage d'être chargé sur le serveur MySQL en cours d'exécution. est le moteur de stockage du plug-in

    2. Qu'est-ce que le cache LRU

    Un algorithme de stratégie de mécanisme d'élimination du cache, car la mémoire cache est toujours limitée, donc lorsque le cache est plein, certains contenus doivent être supprimés et du nouveau contenu sous Dans le mécanisme LRU, les données éliminées sont appelées données inutiles. Le nom complet de LRU est Les moins récemment utilisées, ce qui signifie que nous pensons que les données qui ont été utilisées récemment sont utiles, et les données qui n'ont pas été utilisées depuis longtemps. devrait être inutile. Oui, lorsque la mémoire est pleine, les données qui n'ont pas été utilisées depuis longtemps seront d'abord supprimées

    • La stratégie de mise en cache d'Ehcache dans la JVM inclut

  1. LRU - le moins récemment. utilisé (le moins récemment utilisé)

  2. LFU - le moins fréquemment utilisé (le moins fréquemment utilisé)

  3. FIFO - premier entré, premier sorti, l'élément le plus ancien par heure de création (efface les premières données mises en cache, peu importe qu'elles soient est fréquemment utilisé)

Apprentissage recommandé : Tutoriel mysql

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer