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.
Empfohlenes Lernen: MySQL-Lern-Tutorial
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.)
Abfragecache——>Parser——>Optimierer——>Abfrage ausführen
Dritte Ebene: Enthält Speicher EngineAbfragecache, 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.
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
Naktive C-API, JDBC, ODBC, .NET, PHP , Python, Perl, Ruby, VB , Workbench, Abfragebrowser, Migrations-Toolkit3. Der Verbindungspool
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 .Verantwortlich für die Überwachung verschiedener Anfragen an MySQL Server, die Annahme von Verbindungsanfragen und die Weiterleitung aller Verbindungsanfragen an das Thread-Verwaltungsmodul.
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 weiterHauptfunktionen:
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.
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.
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 Verarbeitung2. Ü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.
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
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)
Empfohlenes Lernen:
MySQL-TutorialDas 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!