So gehen Sie nach der MySQL-Tabellenpartitionierung problemlos online

So gehen Sie nach der MySQL-Tabellenpartitionierung problemlos online

Zweck der Tabelle

Während der Projektentwicklung werden unsere Datenbankdaten immer größer und daher befinden sich zu viele Daten in einer einzelnen Tabelle. Dies hat zur Folge, dass Datenabfragen langsamer werden und Anwendungsvorgänge aufgrund des Tabellensperrmechanismus erheblich beeinträchtigt werden, was zu einem Engpass bei der Datenbankleistung führt.

In diesem Fall können wir eine Aufteilung der Tabelle in Betracht ziehen, d. h. eine Aufteilung einer einzelnen Datenbanktabelle in mehrere Datentabellen. Wenn Benutzer dann auf die Daten zugreifen, können sie gemäß bestimmten Algorithmen auf verschiedene Tabellen zugreifen. Auf diese Weise werden die Daten auf mehrere Datentabellen verteilt, wodurch der Zugriffsdruck einer einzelnen Datentabelle verringert wird. Verbesserte Leistung beim Datenbankzugriff.

Zum Beispiel

Zum Beispiel unsere häufigste Benutzertabelle (Benutzertabelle)

Ausweis Benutzer-ID Andere Felder
Primärschlüssel-ID Benutzer-ID Andere Felder

Normalerweise verwenden wir die Benutzer-ID, um die entsprechenden Benutzerinformationen abzufragen. Mit zunehmendem Geschäftswachstum wird diese Tabelle jedoch immer größer, sogar in den Hunderten von Millionen, was die Abfrageleistung erheblich beeinträchtigt. Daher werden wir diese Tabelle in mehrere Tabellen aufteilen, um den Abfragedruck zu verringern

Strategie zur Tabellenpartitionierung

Am Beispiel von 10 Tabellen (die genaue Anzahl der Tabellen sollte anhand der tatsächlichen Bedingungen geschätzt werden) erstellen wir zuerst 10 Tabellen: user1, user2 und user3. . . . . Benutzer10

Im Allgemeinen verwenden wir das indizierte Feld (Benutzer-ID) für die Modulo-Verarbeitung. Wenn Sie die Tabelle in beliebig viele Tabellen aufteilen möchten, können Sie den Modul beliebig verwenden. In diesem Fall beträgt er beispielsweise 10.

$Tabellenname = $Benutzer-ID % 10;

Nach der obigen Modulformel

  • Die Benutzer-ID 1295 befindet sich in Benutzer5
  • Die Benutzer-ID 8634 befindet sich in Benutzer4
  • . . . . . . .

„Jedes Mal, wenn CURD gemäß der Strategie der obigen Tabellensuche ausgeführt wird“, ist dies kein großes Problem, daher werden wir vorerst nicht darüber sprechen.

Was mache ich mit den Lauftabellen, die bereits online sind?

Eigentlich sollte jeder wissen, wie die oben beschriebene Methode anzuwenden ist, es gibt jedoch ein Problem: Was tun mit der Tabelle, die bereits online gestellt wurde? Die Daten in dieser Tabelle werden ständig online abgefragt oder geändert. Wie können wir die Tabellen reibungslos partitionieren, ohne dass die Benutzer es bemerken?

Methode 1

Gehen Sie direkt online und schreiben Sie im Voraus ein Skript. Der Inhalt des Skripts besteht darin, die Daten der alten Tabelle (Benutzer) mit der Tabelle user1 und der Tabelle user10 zu synchronisieren. Führen Sie es aus, sobald es online geht

Diese Methode ist offensichtlich nicht durchführbar, hauptsächlich aufgrund der folgenden Probleme

  • Was passiert, wenn während der Ausführung ein Problem mit dem Skript auftritt? Gesamten Code zurücksetzen?
  • Das Skript synchronisiert die Daten der alten Tabelle (Benutzer) mit der Tabelle user1 und der Tabelle user10. Wie lange dauert die Ausführung dieses Skripts? Wenn es 1 Stunde beträgt, ist das mit dieser Tabelle verbundene Online-Geschäft während dieser Zeit nicht normal.

Dies funktioniert offensichtlich nicht und hat enorme Auswirkungen auf die Online-Community.

Methode 2

Schreiben Sie zunächst ein Skript zum Synchronisieren der Daten. Der Inhalt des Skripts besteht darin, die Daten der alten Tabelle (Benutzer) mit der Tabelle user1 und der Tabelle user10 zu synchronisieren. Nachdem die Skriptsynchronisierung abgeschlossen ist, gehen Sie online.

Diese Methode scheint benutzerfreundlicher zu sein, bringt aber auch einige Probleme mit sich.

  • Nachdem das Skript synchronisiert wurde, geht es sofort online. Zwischen diesen beiden Dingen besteht ein gewisser Zeitunterschied. Während dieses Zeitunterschieds kann es zu einigen Änderungen in der Online-Tabelle kommen. Was ist mit diesen Änderungen zu tun?

„Es scheint, dass die beiden oben genannten Methoden nicht durchführbar sind, also müssen wir anscheinend etwas anderes tun. Kommen wir direkt zum Fazit.“

Schritt 1: Dual Write starten

Lassen Sie uns zunächst die doppelte Schrift online stellen. Was bedeutet das? Wenn beispielsweise die Benutzer-ID = 123 ist, bearbeiten wir für Hinzufügungs-, Lösch- und Änderungsvorgänge sowohl die Benutzertabelle als auch die Benutzer3-Tabelle, die der Benutzer-ID = 123 entspricht.

Funktion „modify($user_id){ //Beinhaltet die Operationen „Hinzufügen“, „Löschen“ und „Ändern“ „modify_user(); //Benutzertabelle ändern $table_name = $user_id % 10;
  modify_user($table_name) //ändert die entsprechende Untertabelle}

Da sich die Abfrage noch in der Benutzertabelle befindet, hat der obige Vorgang keine Auswirkungen auf Online-Benutzer.

Schritt 2: Vollständige Synchronisierung

Schreiben Sie ein Skript, um die Benutzertabelle vollständig mit der Tabelle user1-user10 zu synchronisieren. Am besten wählen Sie für die Ausführung des Skripts einen Zeitraum mit geringer Auslastung, falls es die Abfrage der Benutzertabelle beeinträchtigt.

Nachdem dieser Schritt ausgeführt wurde, sind die Daten zwischen der Benutzertabelle und der Benutzer1-Benutzer10-Tabelle vollständig konsistent, da wir zuvor den dualen Schreibvorgang gestartet haben (siehe Schritt 1).

Schritt 3: Abfragen der neuen Tabellendaten

Ändern Sie den Abfrageteil in user1-user10

Da wir in den beiden vorherigen Schritten die vollständige Datenkonsistenz zwischen der Benutzertabelle und jeder Untertabelle sichergestellt haben, besteht kein Problem darin, den Abfrageteil direkt zu ändern.

Wenn Sie die oben genannten Schritte befolgen, hat dies keine Auswirkungen auf Online-Daten. So arbeiten wir online. Nach vielen Versuchen haben wir sichergestellt, dass es keine Probleme geben wird. Sie können es vertrauensvoll verwenden.

Zusammenfassen

Dies ist das Ende dieses Artikels zum reibungslosen Starten der MySQL-Tabellenpartitionierung. Weitere Informationen zum reibungslosen Starten der MySQL-Tabellenpartitionierung finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Detaillierte Schritte für einen reibungslosen Übergang von MySQL zu MariaDB
  • Apache, SSL, MySQL und PHP lassen sich reibungslos und nahtlos installieren
  • Detaillierte Erläuterung der reibungslosen Erweiterung der MySQL-Datenbank zur Lösung von Problemen mit hoher Parallelität und großem Datenvolumen

<<:  37 Tipps für ein gutes User Interface Design (mit Bildern)

>>:  Eine kurze Erläuterung der Anzeigemodi von HTML-Tags (Tags auf Blockebene, Inline-Tags, Inline-Block-Tags)

Artikel empfehlen

Schritte für den Exit-Fehlercode des Docker-Containers

Manchmal werden einige Docker-Container nach eine...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.18

Lernziele: Lernen Sie, MySQL-Datenbanken unter de...

Reacts Methode zur Realisierung einer sekundären Verknüpfung

In diesem Artikel wird der spezifische Code von R...

Detaillierte Erklärung der Rolle statischer Variablen in MySQL

Detaillierte Erklärung der Rolle statischer Varia...

Linux-Datei-/Verzeichnisberechtigungen und Eigentümerverwaltung

1. Übersicht über Dateiberechtigungen und Eigentu...

Ein tiefer Einblick in JavaScript-Promises

Inhaltsverzeichnis 1. Was ist Promise? 2. Warum g...

Detaillierte Erklärung der MySQL 8.0.18-Befehle

Öffnen Sie den gerade entpackten Ordner C:\web\my...

So stellen Sie Daten mit Binlog in MySQL 5.7 wieder her

Schritt 1: Stellen Sie sicher, dass MySQL Binlog ...

Teilen Sie JS vier lustige Hacker-Hintergrundeffektcodes

Inhaltsverzeichnis Beispiel 1 Beispiel 2 Beispiel...

Mehrere Implementierungsmethoden der Tab-Leiste (empfohlen)

Registerkarten: Kategorie + Beschreibung Tag-Leis...

Überwachung sowie Betrieb und Wartung von Linux-Diensten

Inhaltsverzeichnis 1. Installieren Sie das psutil...

Verwenden Sie reines JS, um den sekundären Menüeffekt zu erzielen

In diesem Artikelbeispiel wird der spezifische JS...

JavaScript implementiert den Div-Maus-Drag-Effekt

In diesem Artikel wird der spezifische Code für J...