Heim  >  Artikel  >  Datenbank  >  Lassen Sie uns über die logische Architektur von MySQL sprechen

Lassen Sie uns über die logische Architektur von MySQL sprechen

WBOY
WBOYnach vorne
2022-03-15 17:36:262072Durchsuche

Dieser Artikel vermittelt Ihnen relevantes Wissen über MySQL, das hauptsächlich Probleme im Zusammenhang mit der logischen MySQL-Architektur vorstellt. Die Architektur ist grob in drei Schichten unterteilt, die für die Verarbeitung von Verbindungsthreads verwendet werden und die meisten MySQL-Kerndienste enthalten Ich hoffe, dass es für alle hilfreich sein wird.

Lassen Sie uns über die logische Architektur von MySQL sprechen

Empfohlenes Lernen: MySQL-Lern-Tutorial

Logische MySQL-Architektur (grob in drei Schichten unterteilt)

Die erste Schicht: Verbindungs-Thread-Verarbeitung

  • Client -> Verbindungs-Thread-Verarbeitung (Verbindungsverarbeitung, Autorisierung). Authentifizierung, Sicherheit)

Die enthaltenen Dienste gelten nicht nur für MySQL. Sie dienen alle C/S-Programmen oder den Anforderungen dieser Programme (Verbindungsverarbeitung, Autorisierungsauthentifizierung, Sicherheit usw.)

Zweite Ebene: Enthält die meisten davon MySQL-Kerndienste

  • Abfragecache——>Parser——>Optimierer——>Abfrage ausführen

Abfragecache, Analyse, Analyse, Optimierung, Caching, alle integrierten Funktionen (Datum, Uhrzeit, mathematisch Gleichzeitig sind alle von der Speicher-Engine bereitgestellten Funktionen (gespeicherte Prozeduren, Trigger, Ansichten) auf dieser Ebene konzentriert.

Prozess: Analysieren der Abfrage. Zuerst müssen Sie nur den Cache abfragen Speichern Sie die Abfrageinformationen und Ergebnisdaten. Wenn eine Abfrage im Cache vorhanden ist, müssen Sie die Abfrage nicht analysieren, optimieren und ausführen. Die im Cache gespeicherten Ergebnisse werden direkt zurückgegeben.

Dritte Ebene: Enthält Speicher Engine

  • Die Speicher-Engine ist für das Speichern und Abrufen von Daten in MySQL verantwortlich (ähnlich dem Dateisystem unter Linux)

Jede Speicher-Engine hat Vor- und Nachteile sowie Zwischendienste. Die Schicht kommuniziert mit dem Speicher Engine durch APIs Diese API-Schnittstellen schirmen die Unterschiede zwischen verschiedenen Speicher-Engines ab und machen die Abfrageschicht so transparent wie möglich.

Die Speicher-Engine-API enthält mehr als ein Dutzend Low-Level-Funktionen, z. B. das Ausführen von „Transaktion starten“ oder das Abrufen von Zeilen mit bestimmten Primärschlüsseln, aber die Speicher-Engine analysiert im Allgemeinen kein SQL (InnoDB analysiert Fremdschlüsseldefinitionen, weil Wenn diese Funktion nicht implementiert ist, kommunizieren verschiedene Speicher-Engines nicht miteinander, sondern reagieren lediglich auf Serveranforderungen der oberen Schicht.

Logische Architektur von MySQL – detaillierte Einführung (unterteilt in acht Schritte)

1. Connectors

  • bezieht sich auf die Interaktion mit SQL in verschiedenen Vorhersagen

Naktive C-API, JDBC, ODBC, .NET, PHP , Python, Perl, Ruby, VB , Workbench, Abfragebrowser, Migrations-Toolkit

3. Der Verbindungspool

  • verwaltet die Pufferung von Benutzerverbindungen, die Thread-Verarbeitung und andere Anforderungen, die Caching erfordern.

Verantwortlich für die Überwachung verschiedener Anfragen an MySQL Server, die Annahme von Verbindungsanfragen und die Weiterleitung aller Verbindungsanfragen an das Thread-Verwaltungsmodul.

Jeder mit MySQL Server verbundenen Clientanforderung wird ein Verbindungsthread zugewiesen (erstellt), um sie separat zu bedienen. Der Verbindungsthread wird zwischengespeichert, sodass nicht jede Clientverbindung separat erstellt und zerstört werden muss Der Verbindungsthread dient der Kommunikation zwischen MySQL Server und dem Client, dem Empfang von Befehlsanforderungen vom Client und der Übertragung von Ergebnisinformationen vom Server. Das Thread-Verwaltungsmodul ist für die Verwaltung und Wartung dieser Verbindungsthreads verantwortlich, einschließlich Thread-Erstellung, Thread-Cache usw .
  • Authentifizierung – Thread-Wiederverwendung – Verbindungsbeschränkungen – Speicher prüfen – Caches
  • 4.SQL-Schnittstelle (SQL-Schnittstelle)

  • Akzeptiert den SQL-Befehl des Benutzers und gibt die Ergebnisse zurück, die der Benutzer abfragen muss Wählen Sie beispielsweise aus, um die SQL-Schnittstelle aufzurufen.

DML, DDL, gespeicherte Prozeduren, Ansichten, Trigger usw wird vom Parser überprüft und analysiert. Es wird von Lex und YACC implementiert. In MySQL sind wir es gewohnt, alle vom Client an den Server gesendeten Befehle aufzurufen. Nachdem der Verbindungsthread eine Anfrage vom Client erhalten hat, leitet er die Anfrage direkt an das Modul weiter, das für die Klassifizierung verschiedener Anfragen verantwortlich ist, und leitet sie dann an die entsprechenden Verarbeitungsmodule weiter

Hauptfunktionen:
    • a. Führen Sie eine semantische und syntaktische Analyse von SQL-Anweisungen durch, zerlegen Sie sie in Datenstrukturen, klassifizieren Sie sie dann nach demselben Operationstyp und führen Sie eine gezielte Weiterleitung an nachfolgende Schritte durch Diese Struktur

    • b Wenn bei der Zerlegung ein Fehler auftritt, bedeutet dies, dass die SQL-Anweisung unangemessen ist Wenn eine Anweisung abgefragt wird, wird der Abfrageoptimierer zur Optimierung der Abfrage verwendet. Dies bedeutet, dass die vom Client angeforderte Abfrageanweisung und einige statistische Informationen in der Datenbank anhand einer Reihe von Algorithmen analysiert werden Erhalten Sie eine optimale Strategie und teilen Sie dem nachfolgenden Programm mit, wie es das Ergebnis dieser Abfrageanweisung mithilfe der Strategie „select-projection-join“ für die Abfrage erhalten soll 1;
      Diese Abfrageanweisung wählt zuerst basierend auf der Anweisung nach wo aus, anstatt zuerst alle Tabellen abzufragen und dann das Geschlecht zu filtern, und führt dann eine Attributprojektion basierend auf UID und Name durch, anstatt alle Attribute herauszunehmen und dann Filter ausführen und schließlich diese beiden Abfragebedingungen verbinden, um das endgültige Abfrageergebnis zu generieren Klasse von MySQL Die von der Abfrageanforderung zurückgegebene Ergebnismenge wird im Speicher zwischengespeichert und entspricht einem Hashwert der Abfrage. Nachdem in der Basistabelle der durch die Abfrage erhaltenen Daten Änderungen aufgetreten sind, macht MySQL den Cache automatisch ungültig In Anwendungssystemen mit einer sehr hohen Schreibrate kann der Query Cache die Leistung erheblich verbessern, verbraucht aber natürlich viel Speicher.
      Wenn im Abfragecache ein gültiges Trefferabfrageergebnis vorhanden ist, kann die Abfrageanweisung Daten direkt aus dem Abfragecache abrufen. Dieser Cachemechanismus besteht aus einer Reihe kleiner Caches, z. B. Tabellencache und Datensatzcache , und Schlüsselcache. , Berechtigungs-Caching usw.

    Globale und Engine-spezifische Caches und Puffer

    8. Pluggable Storage Engines (Pluggable Storage Engine)

    Storage Engine-Schnittstelle: Das wichtigste Merkmal, das MySQL von unterscheidet anderen Datenbanken ist die Plug-in-Tabellenspeicher-Engine.

    Die MySQL-Plug-in-Speicher-Engine-Architektur bietet eine Reihe von Standardverwaltungs- und Serviceunterstützungen. Diese Standards haben nichts mit der Speicher-Engine selbst zu tun und können für jedes Datenbanksystem wie SQL-Analysatoren und -Optimierer usw. erforderlich sein. Die Speicher-Engine ist die Implementierung der zugrunde liegenden physischen Struktur. Jeder Storage-Engine-Entwickler kann nach seinen eigenen Wünschen entwickeln.

    9.Dateisystem

    Dateisystem, Daten, Protokollindex (Wiederherstellen, Rückgängigmachen), Fehlerprotokoll, Abfragedatensatz, langsame Abfrage usw.

    • Hinweis: Die Speicher-Engine basiert auf Tabellen , nicht Datenbank

    • Datenbank-Workflow
    • TCP-Verbindung herstellen——>Benutzer überprüfen——>Thread zum Parsen von SQL erstellen——>Ausführungsplan generieren——>Tabelle öffnen——>Puffer durchsuchen, um zu sehen, was Sie benötigen Ob die Datenseite zwischengespeichert ist——>Daten von der Festplatte scannen——>Daten abrufen und in den Pufferpool schreiben——>Daten an den Client zurückgeben——>Tabelle schließen——>Thread schließen——> Verbindung schließen

      Oberste Ebene: Client-Verbindung
    1. Verbindungsverarbeitung: Das Verbindungsverwaltungsmodul stellt die Verbindung her und fordert einen Verbindungsthread an ist ein Verbindungsthread im Verbindungspool. Wenn nicht, erstellen Sie einen neuen Verbindungsthread, der für diesen Client verantwortlich ist.

    2 Autorisierungsauthentifizierung Beim Abfragevorgang muss der Benutzer aufgerufen werden. Das Modul führt eine Berechtigungsprüfung durch, um zu überprüfen, ob der Benutzer über die entsprechende Berechtigung verfügt. Anschließend wird der Dienst bereitgestellt und der Verbindungsthread beginnt, die SQL-Anweisung vom Client zu akzeptieren und zu verarbeiten Schicht: Kerndienst. 1. Verbindungsthread Nach dem Empfang der SQL-Anweisung wird die Anweisung zur Syntax- und Semantikanalyse an das SQL-Anweisungs-Parsing-Modul übergeben.

    2. Wenn es sich um eine Abfrageanweisung handelt, können Sie zunächst prüfen, ob ein Ergebnis im Abfragecache vorhanden ist. Wenn ein Ergebnis vorhanden ist, wird es direkt an den Client zurückgegeben.

    3. Wenn im Abfragecache keine Ergebnisse vorhanden sind, müssen Sie die Datenbank-Engine-Ebene abfragen und die SQL-Anweisung an den Optimierer senden, um die Abfrage zu optimieren. Wenn es sich um eine Tabellenänderung handelt, wird die Klassifizierung zum Einfügen übergeben. Aktualisieren, Löschen, Erstellen, Alarmverarbeitungsmodul zur Verarbeitung

      Die dritte Ebene: Datenbank-Engine-Ebene
    1 Öffnen Sie die Tabelle und erhalten Sie bei Bedarf die entsprechende Sperre.

    2. Überprüfen Sie zunächst, ob entsprechende Daten auf der Cache-Seite vorhanden sind. Wenn nicht, lesen Sie sie direkt von der Festplatte werden in den Cache geladen, um nachfolgende Abfragen effizienter zu gestalten. Aufgrund des begrenzten Caches werden häufig flexible LRU-Tabellen zur Verwaltung von Cache-Seiten verwendet, um sicherzustellen, dass häufig auf die zwischengespeicherten Daten zugegriffen wird.

    4. Nachdem Sie die Daten erhalten haben, geben Sie sie an den Client zurück, schließen Sie die Verbindung und geben Sie den Verbindungsthread frei.

    FAQ-Analyse

    1. Was ist eine Plug-in-Speicher-Engine? Eine Speicher-Engine liest und schreibt Daten auf die Festplatte, da die Transaktionen, Sperren usw. unterschiedlich sind Wir haben unterschiedliche Geschäftsanforderungen, daher gibt es in einer Datenbank viele Speicher-Engines. Da die Speicher-Engine auf Tabellen basiert, können verschiedene Tabellen unterschiedliche Speicher-Engines haben, sodass die Speicher-Engine in den laufenden MySQL-Server geladen werden kann ist die Plug-in-Speicher-Engine

    2. Was ist LRU-Cache

    Ein Strategiealgorithmus für den Cache-Eliminierungsmechanismus, da der Cache-Speicher immer begrenzt ist. Wenn der Cache also voll ist, müssen einige Inhalte gelöscht und neue Inhalte hinzugefügt werden Beim LRU-Mechanismus werden die gelöschten Daten als nutzlose Daten bezeichnet. Der vollständige Name von LRU lautet „Least Latest Used“, was bedeutet, dass wir denken, dass die Daten, die kürzlich verwendet wurden, nützlich sind, und die Daten, die seit langem nicht verwendet wurden sollte nutzlos sein. Ja, wenn der Speicher voll ist, werden Daten, die längere Zeit nicht verwendet wurden, zuerst gelöscht. Die Caching-Strategie von Ehcache in der JVM umfasst

      LRU – zuletzt verwendet (zuletzt verwendet)
    • LFU – am wenigsten häufig verwendet (am seltensten verwendet)
    1. FIFO – First-in-First-out, das älteste Element nach Erstellungszeitpunkt (löschen Sie die frühesten zwischengespeicherten Daten, egal, ob dies der Fall ist). wird häufig verwendet)

    2. Empfohlenes Lernen:

      MySQL-Tutorial

Das obige ist der detaillierte Inhalt vonLassen Sie uns über die logische Architektur von MySQL sprechen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen