1. Datenbank-EngpassUnabhängig davon, ob es sich um einen E/A-Engpass oder einen CPU-Engpass handelt, führt dies letztendlich zu einem Anstieg der Anzahl der aktiven Verbindungen der Datenbank und nähert sich dann dem Schwellenwert der Anzahl aktiver Verbindungen, die die Datenbank unterstützen kann, oder erreicht diesen sogar. Aus Sicht der Business Services stehen nur wenige oder gar keine Datenbankverbindungen zur Verfügung. Sie können sich vorstellen, was als Nächstes passieren wird (Parallelität, Durchsatz und Abstürze). 1. IO-Engpass Der erste Typ: Engpass bei der Festplatten-Lese-E/A. Es gibt zu viele Hot Data und der Datenbank-Cache kann sie nicht speichern. Jede Abfrage generiert eine große Menge an E/A, was die Abfragegeschwindigkeit verringert -> Sharding und vertikales Sharding. Der zweite Typ: Netzwerk-E/A-Engpass, es werden zu viele Daten angefordert und die Netzwerkbandbreite reicht nicht aus -> Sharding. 2. CPU-Engpass Der erste Typ: SQL-Probleme, wie etwa SQL mit Join, Group By, Order By, bedingten Abfragen nicht indizierter Felder usw., die die CPU-Rechenvorgänge erhöhen -> SQL-Optimierung, Erstellen geeigneter Indizes und Ausführen von Geschäftsberechnungen auf der Geschäftsdienstebene. Der zweite Typ: Die Datenmenge in einer einzelnen Tabelle ist zu groß, während der Abfrage werden zu viele Zeilen gescannt, die SQL-Effizienz ist gering und die CPU ist der erste Engpass -> Horizontale Tabellenpartitionierung. 2. Unterbibliothek und Untertisch1. Horizontale Datenbank Konzept: Teilen Sie die Daten in einer Datenbank basierend auf Feldern und bestimmten Strategien (Hash, Bereich usw.) in mehrere Datenbanken auf. Ergebnis:
Szenario: Die absolute Parallelität des Systems hat zugenommen, und das Problem der Tabellenteilung kann grundsätzlich nur schwer gelöst werden. Darüber hinaus besteht keine klare Geschäftszugehörigkeit zur vertikalen Teilung der Datenbank. Analyse: Mit mehr Bibliotheken kann der Druck auf IO und CPU exponentiell verringert werden. 2. Horizontaler Tisch Konzept: Teilen Sie die Daten einer Tabelle basierend auf Feldern und gemäß bestimmter Strategien (Hash, Bereich usw.) in mehrere Tabellen auf. Ergebnis:
Szenario: Die absolute Parallelität des Systems hat nicht zugenommen, aber die Datenmenge in einer einzelnen Tabelle ist zu groß, was die SQL-Effizienz beeinträchtigt und die CPU-Belastung erhöht, was zu einem Engpass führt. Empfohlen: Eine Analyse der Prinzipien der SQL-Abfrageoptimierung Analyse: Die Datenmenge in der Tabelle wird reduziert und die Effizienz der einzelnen SQL-Ausführung ist hoch, was natürlich die Belastung der CPU verringert. 3. Vertikale UnterdatenbankKonzept: Basierend auf der Tabelle werden verschiedene Tabellen entsprechend unterschiedlicher Geschäftsattribute in unterschiedliche Datenbanken aufgeteilt. Ergebnis:
Szenario: Die absolute Parallelität des Systems hat zugenommen und separate Geschäftsmodule können abstrahiert werden. Analyse: An diesem Punkt kann es grundsätzlich in einen Dienst umgewandelt werden. Beispielsweise gibt es mit der Entwicklung des Geschäfts immer mehr öffentliche Konfigurationstabellen und Wörterbuchtabellen. Zu diesem Zeitpunkt können diese Tabellen in separate Bibliotheken aufgeteilt oder sogar in Dienste umgewandelt werden. Darüber hinaus können im Zuge der Geschäftsentwicklung und der Entwicklung neuer Geschäftsmodelle die zugehörigen Tabellen in separate Datenbanken aufgeteilt oder sogar in Dienste umgewandelt werden. 4. Vertikaler Tisch Konzept: Basierend auf den Feldern und entsprechend der Aktivität der Felder werden die Felder in der Tabelle in verschiedene Tabellen (Haupttabelle und erweiterte Tabelle) aufgeteilt. Ergebnis:
Szenario: Die absolute Parallelität des Systems hat nicht zugenommen. Die Tabelle enthält nicht viele Datensätze, aber viele Felder. Hot-Data und Nicht-Hot-Data werden zusammen gespeichert, sodass der für eine einzelne Datenzeile erforderliche Speicherplatz groß ist. Dies führt dazu, dass die Anzahl der Datenzeilen im Datenbankcache reduziert wird und beim Lesen von Festplattendaten während Abfragen eine große Menge zufälliger Lese-E/A-Vorgänge generiert wird, was zu einem E/A-Engpass führt. Analyse: Zum besseren Verständnis können Sie Listenseiten und Detailseiten verwenden. Das Prinzip der vertikalen Tabellenaufteilung besteht darin, Hot Data (Daten, die redundant sein können und oft zusammen abgefragt werden) als Haupttabelle zusammenzufassen und Nicht-Hot Data als erweiterte Tabelle zusammenzufassen. Auf diese Weise können mehr Hot Data zwischengespeichert und dadurch der zufällige Lese-E/A-Aufwand reduziert werden. Wenn Sie nach der Aufteilung alle Daten erhalten möchten, müssen Sie die beiden Tabellen verbinden, um die Daten zu erhalten. Denken Sie aber daran, niemals einen Join zu verwenden, da dieser nicht nur die CPU-Belastung erhöht, sondern auch die beiden Tabellen miteinander verknüpft (müssen sich auf einer Datenbankinstanz befinden). Für verknüpfte Daten sollten Sie auf der Business-Service-Ebene arbeiten, die Daten der Haupttabelle und der erweiterten Tabelle separat abrufen und dann die verknüpften Felder zum Zuordnen verwenden, um alle Daten abzurufen. 3. Tools zum Sharding von Bibliotheken und Tabellen
4. Schritte zum Aufteilen von Datenbanken und TabellenBewerten Sie die Anzahl der Shards oder Tabellen basierend auf der Kapazität (aktuelle Kapazität und Wachstum) -> Schlüssel auswählen (gleichmäßig) -> Regeln für die Tabellen-Sharding-Regelung (Hash oder Bereich usw.) -> Ausführen (im Allgemeinen doppeltes Schreiben) -> Probleme bei der Kapazitätserweiterung (Datenbewegung minimieren). 5. Probleme mit Sharding1. Abfrageproblem bei Nicht-PartitionsschlüsselnDie Aufteilungsstrategie basiert auf horizontaler Datenbank- und Tabellenteilung und ist die häufig verwendete Hash-Methode. Neben dem Partitionsschlüssel gibt es auf dem Client nur einen Nicht-Partitionsschlüssel als Bedingung für die Abfrage Zuordnungsmethode Genetische Methode
Neben dem Partitionsschlüssel gibt es mehrere Nicht-Partitionsschlüssel als Voraussetzung für die Abfrage auf dem Client Zuordnungsmethode Redundanzmethode
Neben dem Partitionsschlüssel gibt es im Hintergrund auch verschiedene Abfragen für Kombinationsbedingungen für Nicht-Partitionsschlüssel NoSQL-Ansatz Redundanzmethode 2. Problem bei datenbank- und tabellenübergreifenden Paging-Abfragen ohne PartitionsschlüsselDie Aufteilungsstrategie basiert auf horizontaler Datenbank- und Tabellenteilung und ist die häufig verwendete Hash-Methode.
3. Probleme bei der KapazitätserweiterungDie Aufteilungsstrategie basiert auf horizontaler Datenbank- und Tabellenteilung und ist die häufig verwendete Hash-Methode. Horizontale Erweiterung der Datenbank (Upgrade von der Datenbankmethode)
Horizontale Erweiterungstabelle (Double-Write-Migrationsmethode) Schritt 1: (Synchronisiertes Dualschreiben) Ändern Sie die Anwendungskonfiguration und den Code, fügen Sie Dualschreiben hinzu und stellen Sie es bereit. Schritt 2: (Synchronous Dual Write) Kopieren Sie die alten Daten der alten Datenbank in die neue Datenbank. Schritt 3: (Synchronisiertes duales Schreiben) Überprüfen Sie die alten Daten in der neuen Datenbank basierend auf der alten Datenbank. Schritt 4: (Synchronisiertes Doppelschreiben) Ändern Sie die Anwendungskonfiguration und den Code, entfernen Sie das Doppelschreiben und stellen Sie es bereit.
6. Zusammenfassung der Unterbibliothek und des UntertischesUm die Datenbank und die Tabellen aufzuteilen, müssen Sie zunächst wissen, wo der Engpass liegt, und dann können Sie eine sinnvolle Aufteilung vornehmen (Datenbank aufteilen oder Tabelle aufteilen? Horizontal oder vertikal? Wie oft?). Und es kann nicht zum Zweck der Trennung von Datenbank und Tabelle aufgeteilt werden. Die Wahl des Schlüssels ist sehr wichtig. Dabei müssen sowohl gleichmäßige Aufteilungen als auch nicht partitionierte Schlüsselabfragen berücksichtigt werden. Sofern die Voraussetzungen erfüllt sind, sollten die Aufteilungsregeln möglichst einfach sein. Damit ist dieser Artikel mit der Zusammenfassung häufig verwendeter MySQL-Sharding-Lösungen abgeschlossen. Weitere Informationen zu MySQL-Sharding 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:
|
<<: Mit JS einen rotierenden Weihnachtsbaum in HTML implementieren
>>: Eine einfache Möglichkeit, den CSS-, JavaScript- und Hintergrundbild-Cache im Browser zu leeren
Laden Sie MySQL 5.7.20 / 5.7.21 herunter, install...
Deinstallieren Sie tomcat9 1. Da die Installation...
Detaillierte Erklärung und Zusammenfassung der UR...
Detaillierte Beschreibung der Eigenschaften Der Z...
Das Setup wird zum Schreiben kombinierter APIs ve...
So funktioniert PHP Lassen Sie uns zunächst die B...
Dieser Artikel beschreibt die MySQL-Benutzerverwa...
Rendern Beispielcode Heute werden wir das WeChat-...
Inhaltsverzeichnis vue2.x Vorkonzept: Routing-Hoo...
Inhaltsverzeichnis brauchen: fahren: Ideen: errei...
Ich habe einen Server, auf dem mehrere Docker-Con...
Dieser Artikel beschreibt die MySQL-Einzeltabelle...
1. MySQL-Image herunterladen Befehl: docker pull ...
1. Zwei Eigenschaften des Tabellen-Resets: ①borde...