1. EinleitungWenn die Datenmenge in der Datenbank ein bestimmtes Niveau erreicht, müssen Engpässe bei der Systemleistung vermieden werden. Es ist eine Datenverarbeitung erforderlich und die verwendeten Methoden sind Partitionierung, Sharding, Datenbank-Sharding und Tabellen-Sharding. 2. Sharding (ähnlich wie Datenbank-Sharding)Sharding ist eine effektive Methode, um eine Datenbank auf mehrere physische Knoten zu skalieren. Sein Hauptzweck besteht darin, die I/O-Kapazitätsbeschränkungen eines Einzelknoten-Datenbankservers zu durchbrechen und Probleme mit der Datenbankskalierbarkeit zu lösen. Das Wort Shard bedeutet „Stück“. Wenn Sie eine Datenbank als großes Stück Glas betrachten und es zerbrechen, wird jedes kleine Stück als Datenbankscherbe bezeichnet. Der Vorgang des Aufteilens der gesamten Datenbank wird als Sharding bezeichnet, was sich mit „Scherben“ übersetzen lässt. Formal kann Sharding einfach als Partitionierungsschema definiert werden, das eine große Datenbank auf mehrere physische Knoten verteilt. Jede Partition enthält einen Teil der Datenbank, der als Slice bezeichnet wird. Die Partitionierungsmethode kann beliebig sein und ist nicht auf die herkömmliche horizontale und vertikale Partitionierung beschränkt. Ein Shard kann den Inhalt mehrerer Tabellen oder sogar den Inhalt mehrerer Datenbankinstanzen enthalten. Jeder Shard wird auf einem Datenbankserver platziert. Ein Datenbankserver kann Daten von einem oder mehreren Shards verarbeiten. Das System benötigt einen Server zur Durchführung der Abfrageweiterleitung und -weiterleitung, der für die Weiterleitung der Abfrage an den Shard- oder Shard-Sammlungsknoten verantwortlich ist, der die von der Abfrage zur Ausführung abgerufenen Daten enthält. 3. Skalieren nach außen/nach oben und vertikale/horizontale AufteilungEs gibt zwei Erweiterungslösungen für MySQL: Scale Out und Scale Up. Scale Out bedeutet, dass die Anwendung horizontal erweitert werden kann. Im Allgemeinen bedeutet Scale-Out bei Rechenzentrumsanwendungen, dass die Anwendung auch beim Hinzufügen weiterer Maschinen die Ressourcen dieser Maschinen weiterhin gut nutzen kann, um ihre Effizienz zu verbessern und eine gute Skalierbarkeit zu erreichen. Scale Up bedeutet, dass die Anwendung in vertikaler Richtung erweitert werden kann. Im Allgemeinen bedeutet Scale-Up für eine einzelne Maschine, dass die Anwendung diese Ressourcen voll ausnutzen kann, um ihre Effizienz zu verbessern und eine gute Skalierbarkeit zu erreichen, wenn ein Rechenknoten (eine Maschine) weitere CPU-Kerne und Speichergeräte hinzufügt und einen größeren Arbeitsspeicher verwendet. Zu den Sharding-Strategien von MySql gehören vertikales und horizontales Sharding. Vertikale Aufteilung: bezieht sich auf die Aufteilung nach Funktionsmodulen, um den E/A-Wettbewerb zwischen Tabellen aufzulösen. Sie kann beispielsweise in Auftragsbibliothek, Produktbibliothek, Benutzerbibliothek usw. unterteilt werden. Auf diese Weise sind die Tabellenstrukturen mehrerer Datenbanken unterschiedlich. Horizontale Aufteilung: Daten aus derselben Tabelle werden in Blöcke aufgeteilt und in verschiedenen Datenbanken gespeichert, um den Druck zu verringern, der durch das Wachstum des Datenvolumens in einer einzelnen Tabelle entsteht. Die Tabellenstrukturen in diesen Datenbanken sind exakt gleich. Der Tischaufbau ist vertikal geteilt. Einige häufige Szenarien sind a) Vertikale Segmentierung großer Felder. Um die Zugriffsperformance der Basistabelle zu verbessern, legen Sie große Felder in einer weiteren Tabelle an. Bei performancekritischen Anwendungen sollten grundsätzlich große Felder in der Datenbank vermieden werden. b) Vertikale Unterteilung nach Verwendungszweck. Beispielsweise können die Materialattribute eines Unternehmens vertikal nach Basisattributen, Verkaufsattributen, Beschaffungsattributen, Produktions- und Fertigungsattributen, Finanzbuchhaltungsattributen usw. unterteilt werden. c). Vertikale Segmentierung basierend auf der Zugriffshäufigkeit. Wenn es beispielsweise in E-Commerce- und Web 2.0-Systemen viele Benutzerattribute gibt, können grundlegende, häufig verwendete Attribute und selten verwendete Attribute vertikal getrennt werden. Der Aufbau der Tischstruktur ist horizontal geteilt. Einige häufige Szenarien sind a). Wenn beispielsweise die Bestelltabelle einer E-Commerce-Website eine große Datenmenge enthält, ist es notwendig, sie in Jahres- und Monatsebenen zu unterteilen. b). Web 2.0-Websites haben zu viele registrierte Benutzer und online aktive Benutzer. Die relevanten Benutzer und die Tabellen, die eng mit den Benutzern verknüpft sind, werden horizontal entsprechend dem Benutzer-ID-Bereich aufgeteilt. c). Beispielsweise treten bei den Top-Beiträgen eines Forums Paginierungsprobleme auf, und jede Seite muss die Top-Beiträge anzeigen. In diesem Fall können die Top-Beiträge horizontal aufgeteilt werden, um beim Abrufen der Top-Beiträge das Lesen aus der Tabelle aller Beiträge zu vermeiden. 4. Tabelle und PartitionDie oberflächliche Bedeutung von Tabellensharding besteht darin, eine Tabelle in mehrere kleine Tabellen aufzuteilen, und Partitionierung besteht darin, die Daten einer Tabelle in N mehrere Blöcke aufzuteilen. Diese Blöcke können sich auf derselben Festplatte oder auf verschiedenen Festplatten befinden. Der Unterschied zwischen Tabellen-Sharding und -Partitionierung 1. Umsetzung MySQLs Tabellen-Sharding ist echtes Tabellen-Sharding. Nachdem eine Tabelle in viele Tabellen aufgeteilt wurde, ist jede kleine Tabelle eine vollständige Tabelle, die drei Dateien entspricht (MyISAM-Engine: eine .MYD-Datendatei, eine .MYI-Indexdatei und eine .frm-Tabellenstrukturdatei). 2. Datenverarbeitung Nachdem die Tabellen aufgeteilt wurden, werden die Daten in den Untertabellen gespeichert. Die Haupttabelle ist nur eine Hülle, und die Datenspeicherung und der Zugriff erfolgen in jeder Untertabelle. Beim Partitionieren gibt es kein Konzept zum Aufteilen von Tabellen. Beim Partitionieren werden die Dateien, in denen Daten gespeichert sind, nur in viele kleine Blöcke aufgeteilt. Die partitionierte Tabelle ist immer noch eine Tabelle und die Datenverarbeitung erfolgt immer noch durch einen einzelnen Benutzer. 3. Leistung verbessern Nachdem die Tabelle aufgeteilt wurde, wird die Parallelitätsfähigkeit einer einzelnen Tabelle verbessert und auch die Festplatten-E/A-Leistung wird verbessert. Durch die Partitionierung wird der Festplatten-E/A-Engpass überwunden und das Ziel verfolgt, die Lese- und Schreibfunktionen der Festplatte zu verbessern und so die MySQL-Leistung zu steigern. An diesem Punkt ist der Fokus von Partitionierung und Tabellensharding unterschiedlich. Der Fokus von Tabellensharding liegt darauf, wie die Parallelität von MySQL beim Datenzugriff verbessert werden kann, während der Fokus von Partitionierung darauf liegt, wie die Lese- und Schreibfunktionen der Festplatte durchbrochen werden können, um das Ziel der Verbesserung der MySQL-Leistung zu erreichen. 4. Schwierigkeit der Umsetzung Es gibt viele Möglichkeiten, eine Tabelle aufzuteilen. Die einfachste Möglichkeit ist die Verwendung der Zusammenführungsfunktion. Dieser Ansatz weist etwa den gleichen Schwierigkeitsgrad wie die Partitionierung auf und kann für den Programmcode transparent sein. Wenn Sie andere Methoden zur Tabellenpartitionierung verwenden, ist dies problematischer als die Partitionierung. Die Partitionierung ist relativ einfach zu implementieren. Das Erstellen einer partitionierten Tabelle unterscheidet sich nicht vom Erstellen einer normalen Tabelle und ist für den Code transparent. Anwendbare Szenarien für Partitionen 1. Die Abfragegeschwindigkeit einer Tabelle ist so langsam, dass ihre Nutzung beeinträchtigt wird. 2. Die Daten in der Tabelle sind segmentiert 3. Operationen an Daten betreffen oft nur einen Teil der Daten, nicht alle Daten CREATE TABLE Verkäufe ( id INT AUTO_INCREMENT, Betrag DOUBLE NOT NULL, order_day DATETIME NICHT NULL, PRIMARY KEY(id, Bestelltag) ) ENGINE=Innodb PARTITION NACH BEREICH(JAHR(Bestelltag)) ( PARTITION p_2010 WERTE WENIGER ALS (2010), PARTITION p_2011 WERTE WENIGER ALS (2011), PARTITION p_2012 WERTE WENIGER ALS (2012), PARTITION p_catchall WERTE KLEINER ALS MAXIMALER WERT); Anwendbare Szenarien für Untertabellen 1. Die Abfragegeschwindigkeit einer Tabelle ist so langsam, dass ihre Nutzung beeinträchtigt wird. 2. Bei häufigem Einfügen oder gemeinsamen Abfragen verringert sich die Geschwindigkeit. Die Implementierung von Sharding erfordert eine Geschäftsintegration und -migration, die relativ komplex ist. 5. Tabellen- und DatenbankaufteilungDurch das Aufteilen von Tabellen lässt sich das Problem der verringerten Abfrageeffizienz aufgrund übermäßiger Datenmengen in einer einzelnen Tabelle lösen, es kann jedoch keine qualitative Verbesserung der gleichzeitigen Verarbeitungsfunktionen der Datenbank erreicht werden. Angesichts hochparalleler Lese- und Schreibzugriffe ist es bedeutungslos, wenn der Datenbank-Masterserver dem Druck der Schreibvorgänge nicht standhalten kann, unabhängig davon, wie sehr die Slave-Server erweitert werden. Daher müssen wir unsere Denkweise ändern und die Datenbank aufteilen, um die Datenbankschreibfähigkeit zu verbessern. Dies wird als Datenbank-Sharding bezeichnet. Ähnlich wie bei der Strategie des Tabellen-Shardings kann beim Datenbank-Sharding eine Schlüsselwort-Modulo-Methode zum Weiterleiten des Datenzugriffs verwendet werden, wie in der folgenden Abbildung dargestellt 6. Unterschiede zwischen Partitionierung und ShardingDamit ist dieser Artikel über die umfassenden und detaillierten Kenntnisse zu MySql-Tabellen-Sharding, Datenbank-Sharding, Sharding und Partitionierung abgeschlossen. Weitere relevante Inhalte zu MySql-Tabellen-Sharding, Datenbank-Sharding, Sharding und Partitionierung finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den verwandten Artikeln weiter unten. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Mit wie vielen Pixeln sollte eine Webseite gestaltet werden?
>>: Referenz zur Webseitenerstellung im IE6 - Standardstil im IE6
Zusammenfassung gängiger Operatoren und Operatore...
Führen Sie den Befehl aus: glxinfo | grep renderi...
Verstehen Sie zunächst eine Methode: Aufrufen ein...
In diesem Artikelbeispiel wird der spezifische Co...
Code kopieren Der Code lautet wie folgt: <div ...
In letzter Zeit stoße ich bei der Verwendung von ...
Meta ist ein Hilfstag im Kopfbereich der HTML-Spra...
Kapseln Sie el-dialog als Komponente ein Wenn wir...
Vorwort Wir müssen bestimmte Daten abrufen, die d...
Dieser Artikel stellt die Installation und Verwen...
In diesem Beispiel wird jQuery verwendet, um eine...
Vorwort In den Anfangsphasen einiger Projekte wer...
In diesem Artikelbeispiel wird der spezifische Co...
Reproduktion des Problems Alibaba Cloud Server, b...