Spezifische Implementierungsmethoden für MySQL-Tabellen-Sharding und -Partitionierung

Spezifische Implementierungsmethoden für MySQL-Tabellen-Sharding und -Partitionierung

Vertikaler Tisch

Vertikale Tabellenaufteilung bedeutet, eine Tabelle mit vielen Spalten in mehrere Tabellen aufzuteilen. Beispielsweise enthält Tabelle A 20 Felder und wird nun in die Tabellen A1 und A2 aufgeteilt, wobei jede Tabelle zehn Felder enthält (die spezifische Aufteilungsmethode hängt vom Unternehmen ab).

Vorteil: In Szenarien mit hoher Parallelität kann die Anzahl der Tabellensperren und Zeilensperren reduziert werden.

Nachteile: Bei sehr großen Datensätzen kommt es immer noch zu Engpässen bei der Lese- und Schreibgeschwindigkeit.

Horizontaler Tisch

Wenn eine bestimmte Website eine Tabelle mit Hunderten Millionen Datensätzen in ihrer Datenbank hat, ist die Abfrage ohne Index sehr langsam, wenn Sie sie über select abfragen. In diesem Fall können Sie den Hash-Algorithmus verwenden, um die Tabelle in 10 Untertabellen aufzuteilen (derzeit beträgt die Datenmenge in jeder Tabelle nur 10 Millionen Datensätze).

Gleichzeitig wird eine allgemeine Tabelle generiert, in der die Informationen jeder Untertabelle aufgezeichnet werden. Wenn Sie einen Datensatz mit der ID = 100 abfragen, muss nicht mehr die gesamte Tabelle gescannt werden. Stattdessen wird die allgemeine Tabelle verwendet, um die entsprechende Untertabelle zu finden, in der sich der Datensatz befindet, und dann wird die entsprechende Tabelle durchsucht, wodurch der IO-Druck verringert wird.

Nachteile: Die Wartung des SQL-Codes der Front-End-Programmanwendung wird große Probleme verursachen. Derzeit können Sie die MySQL Merge-Speicher-Engine verwenden, um die Tabellenpartitionierung zu implementieren.

---------------------------------------Ich bin die Trennlinie, die mir Schmerzen bereitet----------------------------------------------------

Die Verwendung der Merge-Speicher-Engine zum Partitionieren von Tabellen ist für die SQL-Anweisungen der Anwendung transparent und erfordert keine Codeänderungen.

CREATE TABLE t1 ( ein INT NOT NULL AUTO_INCREMENT PRIMARY KEY, Nachricht CHAR(20));
CREATE TABLE t2 (ein INT NOT NULL AUTO_INCREMENT PRIMARY KEY, Nachricht CHAR(20));
INSERT INTO t1 (Nachricht) VALUES ('Testen'), ('Tabelle'), ('t1');
INSERT INTO t2 (Nachricht) VALUES ('Testen'), ('Tabelle'), ('t2');
CREATE TABLE insgesamt (ein INT NOT NULL AUTO_INCREMENT PRIMARY KEY, Nachricht CHAR(20)) ENGINE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;

Beim Erstellen der Gesamttabelle kann es zu einem Fehler kommen:

Die zugrunde liegende Tabelle, die anders definiert ist, nicht vom Typ MyISAM ist oder nicht existiert, kann nicht geöffnet werden.

Tatsächlich ist die Merge-Speicher-Engine eine virtuelle Tabelle, und die entsprechende tatsächliche Tabelle muss eine Tabelle vom Typ MyISAM sein. Wenn Ihre MySQL-Version 5.1 oder höher ist, verwendet die Standarddatenbank die InnoDB-Speicher-Engine. Daher müssen beim Erstellen von total die Tabellen t1 und t2 MyISAM-Speicher-Engines sein.

Wenn Sie regelmäßig Untertabellen hinzufügen müssen, müssen Sie nur die Vereinigung der zusammengeführten Tabelle ändern.

Tabelle erstellen t3 (ein INT NOT NULL AUTO_INCREMENT PRIMARY KEY, Nachricht CHAR (20));
ALTER TABLE total UNION=(t1,t2,t3)

Horizontale Trennwand

Wenn beispielsweise 1 Million Daten vorhanden sind, werden sie in zehn Teile aufgeteilt. Die ersten 100.000 Daten werden in der ersten Partition abgelegt, die zweiten 100.000 Daten werden in der zweiten Partition abgelegt und so weiter. Wenn ein Datenelement abgerufen wird, enthält es alle Felder in der Tabellenstruktur und die horizontale Partitionierung ändert die Tabellenstruktur nicht.

Vertikale Trennwand

Wenn Sie beispielsweise eine Benutzertabelle entwerfen, denken Sie möglicherweise am Anfang nicht sorgfältig nach und fügen alle persönlichen Informationen in eine Tabelle ein. Diese Tabelle enthält relativ große Felder, z. B. persönliche Profile. Diese Profile werden jedoch möglicherweise nicht von vielen Personen angezeigt. Wenn also jemand sie anzeigen möchte, sucht er danach. Beim Aufteilen der Tabelle können Sie solche großen Felder trennen.

Eine vollständige Tabelle entspricht drei Dateien: einer .MYD-Datendatei, einer .MYI-Indexdatei und einer .frm-Tabellenstrukturdatei.

Das könnte Sie auch interessieren:
  • Erweiterte MySQL-Funktionen - detaillierte Erläuterung des Konzepts und des Mechanismus der Datentabellenpartitionierung
  • Ausführliche Erläuterung der Kenntnisse zu MySql-Tabellen, Datenbanken, Sharding und Partitionierung
  • Einführung in die Wissenspunkte MySql-Tabelle, Datenbank, Sharding und Partitionierung
  • MySQL-Partitionierungspraxis mit Navicat
  • Richtiger Einsatz von MySQL-Partitionstabellen
  • Mysql-Optimierung Zabbix-Partitionsoptimierung
  • Ist es notwendig, einen separaten Index für die MySQL-Partitionsfeldspalte zu erstellen?
  • Überlegungen zur Partitionierung von MySQL-Datenbanktabellen [empfohlen]
  • Eine kurze Analyse der MySQL-Datentabellenpartitionstechnologie
  • MySQL-Datentabellenpartitionierungsstrategie und Vor- und Nachteileanalyse

<<:  Verwenden Sie natives JS, um den Scroll-Effekt des Live-Bullet-Bildschirms zu simulieren

>>:  Zeigt Ihnen, wie Sie das Linux-Subsystem von Win10 aktivieren (mit detaillierten Bildern und Text)

Artikel empfehlen

Docker realisiert die Verbindung mit demselben IP-Netzwerksegment

Vor Kurzem habe ich das Problem gelöst, dass Dock...

JavaScript-OffsetParent-Fallstudie

1. Definition von offsetParent: offsetParent ist ...

W3C Tutorial (11): W3C DOM Aktivitäten

Das Document Object Model (DOM) ist eine Plattfor...

Zusammenfassung der MySQL InnoDB-Architektur

Inhaltsverzeichnis Einführung 1. Gesamtarchitektu...

React-Beispiel, das den Fortschritt des Datei-Uploads zeigt

Inhaltsverzeichnis React-Demo zur Anzeige des Dat...

vue+el-upload realisiert den dynamischen Upload mehrerer Dateien

vue+el-upload Dynamischer Upload mehrerer Dateien...