Heim  >  Artikel  >  Datenbank  >  MySQL-Optimierungsarchitektur und Speicher-Engine (Zusammenfassungsfreigabe)

MySQL-Optimierungsarchitektur und Speicher-Engine (Zusammenfassungsfreigabe)

WBOY
WBOYnach vorne
2021-12-29 18:36:081678Durchsuche

Dieser Artikel vermittelt Ihnen relevantes Wissen über die MySQL-Architektur und die Zusammenfassung der Speicher-Engine. Ich hoffe, dass er Ihnen hilfreich sein wird.

MySQL-Optimierungsarchitektur und Speicher-Engine (Zusammenfassungsfreigabe)

1. MySQL-Struktursystem

Im Allgemeinen können wir MySQL in drei Schichten unterteilen. Wenn die Schichtung detaillierter ist, kann die Speicher-Engine-Schicht weiter in die Engine-Schicht unterteilt werden Speicherschicht:

Verbindungsschicht
Die oberste Schicht besteht aus einigen Clients und Verbindungsdiensten, einschließlich lokaler Sock-Kommunikation und den meisten TCP/IP-ähnlichen Kommunikationen basierend auf Client/Server-Tools. Es führt hauptsächlich einige Verbindungsverarbeitungs-, Autorisierungsauthentifizierungs- und zugehörige Sicherheitslösungen durch. Auf dieser Ebene wird das Konzept des Thread-Pools eingeführt, um Threads für Clients bereitzustellen, die über Authentifizierung sicher darauf zugreifen. Auf dieser Ebene können auch SSL-basierte sichere Links implementiert werden. Der Server überprüft außerdem die Betriebsberechtigungen, die er für jeden Client hat, der sicher auf ihn zugreift.

Serviceschicht
Die Architektur der zweiten Schicht vervollständigt hauptsächlich die meisten Kerndienstfunktionen, wie z. B. die SQL-Schnittstelle, und vervollständigt zwischengespeicherte Abfragen, SQL-Analyse und -Optimierung sowie die Ausführung einiger integrierter Funktionen. In dieser Schicht sind auch alle speichermotorübergreifenden Funktionen implementiert, wie z. B. Prozeduren, Funktionen usw. Auf dieser Ebene analysiert der Server die Abfrage, erstellt den entsprechenden internen Analysebaum und führt die entsprechende Optimierung durch, z. B. die Bestimmung der Reihenfolge der Tabellenabfragen, die Verwendung von Indizes usw., und generiert schließlich die entsprechenden Ausführungsvorgänge. Wenn es sich um eine Select-Anweisung handelt, fragt der Server auch den internen Cache ab. Wenn der Cache-Speicherplatz groß genug ist, kann dies die Leistung des Systems in einer Umgebung, die eine große Anzahl von Lesevorgängen löst, erheblich verbessern.

Engine-Schicht
Speicher-Engine-Schicht, die Speicher-Engine ist wirklich für die Speicherung und den Abruf von Daten in MySQL verantwortlich. Der Server kommuniziert mit der Speicher-Engine über die API. Verschiedene Speicher-Engines haben unterschiedliche Funktionen, sodass wir entsprechend unseren Anforderungen die geeignete Speicher-Engine auswählen können.

Speicherschicht
Die Datenspeicherschicht speichert hauptsächlich Daten im Dateisystem und vervollständigt die Interaktion mit der Speicher-Engine. Im Vergleich zu anderen Datenbanken ist die Architektur von MySQL etwas anders und kann in vielen verschiedenen Szenarien eingesetzt werden. Die Plug-in-Speicher-Engine-Architektur spiegelt sich hauptsächlich in der Speicher-Engine wider und trennt die Abfrageverarbeitung von anderen Systemaufgaben sowie der Datenspeicherung und -extraktion. Diese Architektur ermöglicht die Auswahl geeigneter Speicher-Engines basierend auf Geschäftsanforderungen und tatsächlichen Anforderungen. 2. MySQL-Server-Komponenten Komponenten wie Java, .net, PHP und andere Sprachen können diese Komponente verwenden, um SQL-Anweisungen auszuführen und die Interaktion mit SQL zu realisieren , Pufferung von Benutzerverbindungen, Thread-Verarbeitung und andere Anforderungen, die Caching erfordern

Verwaltungsdienste und Dienstprogramme: Verwaltungsdienste und Toolkomponenten

Wird für Systemverwaltungs- und Kontrolltools wie Sicherung und Wiederherstellung, MySQL-Replikation, Clustering und Sicherheitsverwaltung verwendet usw.

SQL-Schnittstelle: SQL-Schnittstellenkomponente

Wird verwendet, um SQL-Befehle von Benutzern wie DML, DDL und gespeicherte Prozeduren usw. zu akzeptieren und die Endergebnisse an den Benutzer zurückzugeben. Parser: Abfrageanalysatorkomponente

SQL-Befehle werden vom Parser überprüft und analysiert. Er analysiert zunächst die Rechtmäßigkeit der SQL-Befehlssyntax und versucht, den SQL-Befehl in eine Datenstruktur zu zerlegen Anweisung ist unangemessen

Optimierer: Optimierungskomponente

Die SQL-Anweisung verwendet den Abfrageoptimierer, um die Abfrage vor der Abfrage zu optimieren.

Zum Beispiel: id,name vom Benutzer auswählen, wobei Alter = 20;

Diese Auswahlabfrage wählt zuerst basierend auf der where-Anweisung aus, anstatt zuerst alle Tabellen abzufragen und dann das Alter zu filtern

Diese Auswahlabfrage wählt zuerst basierend auf der ID aus und Name Führen Sie eine Attributprojektion durch, anstatt alle Attribute herauszunehmen und dann zu filtern.

Verbinden Sie diese beiden Abfragebedingungen, um das endgültige Abfrageergebnis zu generieren , Die Abfrageanweisung kann Daten direkt aus dem Abfragecache abrufen. Dieser Caching-Mechanismus besteht aus einer Reihe kleiner Caches. Zum Beispiel Tabellen-Cache, Datensatz-Cache, Schlüssel-Cache, Berechtigungs-Cache usw.

Engine-Layer-Komponenten

Pluggable Storage Engines: Storage Engines
Storage Engines sind die Implementierung von Technologien wie dem Speichern von Daten, dem Erstellen von Indizes, dem Aktualisieren von Abfragedaten usw. Die Speicher-Engine ist tabellenbasiert, nicht bibliotheksbasiert. Daher können Speicher-Engines auch als Tabellentypen bezeichnet werden. Die Erstellung von Tabellen, die Datenspeicherung, der Abruf, die Aktualisierung usw. werden alle von der MySQL-Speicher-Engine durchgeführt. Dies ist auch die wichtige Rolle, die die MySQL-Speicher-Engine in MySQL spielt.

MYSQL bietet eine Plug-in-Speicher-Engine-Architektur, sodass Benutzer je nach Bedarf verschiedene Speicher-Engines für Datentabellen auswählen können. Benutzer können auch ihre eigenen Speicher-Engines schreiben oder Speicher-Engines entsprechend ihren eigenen Anforderungen schreiben. Sogar verschiedene Tabellen in einer Bibliothek, die unterschiedliche Speicher-Engines verwenden, sind zulässig.

Komponenten der Speicherschicht

Dateisystem: Dateisystem

Ein System, das tatsächlich zum Speichern von MySQL-Datenbankdateien und einigen Protokolldateien usw. verwendet wird. Zu den häufigsten gehören Linux, Windows usw.

3. Speicher-Engine

Unterschiede bei häufig verwendeten Speicher-Engines

Vor MySQL-Version 5.5 war MyISAM die Standard-Speicher-Engine, die mit MySQL geliefert wird. Nach Version 5.5 wurde die Standardspeicher-Engine auf InnoDB geändert, das von einem Drittunternehmen für MySQL entwickelt wurde. Warum es ändern?

Der Hauptgrund ist, dass InnoDB Transaktionen und Sperren auf Zeilenebene unterstützt, was für Szenarien mit hohen Anforderungen an die Geschäftskonsistenz besser geeignet ist.

Anweisungen zur Tabellenerstellung für verschiedene Speicher-Engines:

CREATE TABLE `user_innodb` (
  `id` int(11) PRIMARY KEY AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `gender` tinyint(1) DEFAULT NULL,
  `phone` varchar(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `user_myisam` (
  `id` int(11) PRIMARY KEY  AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `gender` tinyint(1) DEFAULT NULL,
  `phone` varchar(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;

CREATE TABLE `user_memory` (
  `id` int(11) PRIMARY KEY AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `gender` tinyint(1) DEFAULT NULL,
  `phone` varchar(11) DEFAULT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8mb4;

CREATE TABLE `user_archive` (
  `id` int(11) PRIMARY KEY AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `gender` tinyint(1) DEFAULT NULL,
  `phone` varchar(11) DEFAULT NULL
) ENGINE=Archive DEFAULT CHARSET=utf8mb4;

CREATE TABLE `user_csv` (
  `id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `gender` tinyint(1) NOT NULL,
  `phone` varchar(11) NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8mb4;

InnoDB
Die InnoDB-Speicher-Engine ist heute die Standard-Speicher-Engine von MySQL. Die InnoDB-Speicher-Engine bietet Transaktionssicherheit mit Commit-, Rollback- und Crash-Recovery-Funktionen. Im Vergleich zur Speicher-Engine von MyISAM ist die Schreibverarbeitungseffizienz von InnoDB jedoch weniger effizient und es wird mehr Speicherplatz für die Aufbewahrung von Daten und Indizes benötigt.

Die Eigenschaften der InnoDB-Speicher-Engine unterscheiden sich von anderen Speicher-Engines:

  1. Transaktionskontrolle
  2. Fremdschlüsseleinschränkungen

InnoDB bietet die folgenden zwei Möglichkeiten zum Speichern von Tabellen und Indizes:

  1. Verwenden Sie gemeinsam genutzten Tabellenbereichsspeicher. Auf diese Weise erstellt Die Tabellenstruktur der Tabelle wird in der .frm-Datei gespeichert, und die Daten und Indizes werden in dem durch innodb_data_home_dir und innodb_data_file_path definierten Tabellenbereich gespeichert, bei dem es sich um mehrere Dateien handeln kann.
  2. Beim Multi-Table-Space-Speicher ist die Tabellenstruktur der auf diese Weise erstellten Tabelle weiterhin in der .frm-Datei vorhanden, die Daten und Indizes jeder Tabelle werden jedoch separat in .ibd gespeichert.

InnoDB Geeignete Nutzungsumgebung:
InnoDB ist die Standardspeicher-Engine von MySQL, die für Transaktionsverarbeitungsanwendungen verwendet wird und Fremdschlüssel unterstützt. Wenn die Anwendung relativ hohe Anforderungen an die Transaktionsintegrität stellt und Datenkonsistenz unter gleichzeitigen Bedingungen erfordert und Datenoperationen neben Einfügungen und Abfragen auch viele Aktualisierungs- und Löschvorgänge umfassen, ist die InnoDB-Speicher-Engine die geeignetere Wahl.

Neben der effektiven Reduzierung von durch Löschungen und Aktualisierungen verursachten Sperren kann die InnoDB-Speicher-Engine auch die vollständige Übermittlung und das Rollback von Transaktionen sicherstellen. Für Systeme mit hohen Anforderungen an die Datengenauigkeit wie Abrechnungssysteme oder Finanzsysteme ist InnoDB die beste Wahl.

MyISAM
MyISAM unterstützt keine Transaktionen oder Fremdschlüssel. Sein Vorteil besteht darin, dass es keine Anforderungen an die Integrität von Transaktionen stellt oder mit dieser Engine grundsätzlich erstellt werden kann.

hat die folgenden zwei wichtigen Funktionen:

  • Unterstützt keine Transaktionen
  • Dateispeichermethode

Jedes MyISAM wird als 3 Dateien auf der Festplatte gespeichert, die Dateinamen sind mit den Tabellennamen identisch, die Erweiterungen jedoch anders:

  • .frm (Speichertabellendefinition);
  • .MYI (MYIndex, Speicherindex);
  • MyISAM geeignete Nutzungsumgebung:
Wenn die Anwendung ist Lesen Hauptsächlich Vorgänge und Einfügevorgänge, es gibt nur wenige Aktualisierungs- und Löschvorgänge und die Anforderungen an Transaktionsintegrität und Parallelität sind nicht sehr hoch, daher ist die Wahl dieser Speicher-Engine sehr gut geeignet.


SPEICHER

Die Speicher-Engine speichert Tabellendaten im Speicher. Jede MEMORY-Tabelle entspricht tatsächlich einer Festplattendatei im .frm-Format. Diese Datei speichert nur die Struktur der Tabelle und ihre Datendateien werden im Speicher gespeichert. Dies trägt zur schnellen Datenverarbeitung bei und verbessert die Effizienz der gesamten Tabelle . Der Zugriff auf Tabellen vom Typ „MEMORY“ ist sehr schnell, da die Daten im Speicher gespeichert werden und standardmäßig den HASH-Index verwenden. Sobald der Dienst jedoch heruntergefahren wird, gehen die Daten in der Tabelle verloren.
SPEICHER Geeignete Nutzungsumgebung:

Speichern Sie alle Daten im RAM, was mehrere Zugriffsblöcke bereitstellen kann, wenn schnelle Standortaufzeichnungen und andere ähnliche Datenumgebungen erforderlich sind.

Der Nachteil von MEMORY besteht darin, dass die Größe der Tabelle begrenzt ist. Zweitens muss sichergestellt werden, dass die Daten in der Tabelle wiederhergestellt werden können Die Tabelle kann wiederhergestellt werden, nachdem die Datenbank abnormal beendet wurde. MEMORY-Tabellen werden normalerweise für kleine Tabellen verwendet, die seltener aktualisiert werden, um schnell Zugriffsergebnisse zu erhalten.

MERGE
Die MERGE-Speicher-Engine ist eine Kombination aus einer Reihe von MyISAM-Tabellen. Diese MyISAM-Tabellen müssen die gleiche Struktur haben. Die MERGE-Tabelle selbst kann keine Daten speichern Diese Operationen werden tatsächlich für die interne MyISAM-Tabelle ausgeführt.

Für den Einfügevorgang der Tabelle vom Typ MERGE wird die eingefügte Tabelle durch die INSERT_METHOD-Klausel definiert, die drei verschiedene Werte haben kann. Die Verwendung des FIRST- oder LAST-Werts führt dazu, dass der Einfügevorgang entsprechend auf die erste oder letzte Tabelle angewendet wird. Unabhängig davon, ob Sie diese Klausel definieren oder als NEIN definieren, bedeutet dies, dass der Einfügevorgang für diese MERGE-Tabelle nicht ausgeführt werden kann.

Sie können eine DROP-Operation für die MERGE-Tabelle ausführen, diese Operation löscht jedoch nur die Definition der MERGE-Tabelle und hat keine Auswirkungen auf die internen Tabellen.


MERGE Geeignete Nutzungsumgebung:
Wird verwendet, um eine Reihe äquivalenter MyISAM-Tabellen logisch zu kombinieren und sie als Objekt zu referenzieren.

Der Vorteil der MERGE-Tabelle besteht darin, dass sie die Größenbeschränkung einer einzelnen MyISAM-Tabelle durchbrechen kann und durch die Verteilung verschiedener Tabellen auf mehrere Festplatten die Zugriffseffizienz der MERGE-Tabelle effektiv verbessert werden kann. Dies eignet sich sehr gut für VLDB-Umgebungen wie Data Warehousing.

Empfohlenes Lernen: MySQL-Video-Tutorial

Das obige ist der detaillierte Inhalt vonMySQL-Optimierungsarchitektur und Speicher-Engine (Zusammenfassungsfreigabe). 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