VorwortRelationale Datenbanken werden eher zu Systemengpässen. Die Speicherkapazität, die Anzahl der Verbindungen und die Verarbeitungsleistung einer einzelnen Maschine sind begrenzt. Wenn die Datenmenge und die Parallelität zunehmen, muss die Datenbank segmentiert werden. Beim Daten-Sharding werden die Datenbank und die Tabelle in verschiedene Teile aufgeteilt. Beim Sharding von Bibliotheken und Tabellen gibt es zwei Aspekte. Es kann sich um Sharding von ausschließlich Bibliotheken ohne Sharding von Tabellen oder um Sharding von ausschließlich Tabellen ohne Sharding von Bibliotheken handeln. Der Kerninhalt der Datenbankverteilung ist nichts anderes als die Datensegmentierung sowie die Positionierung und Integration der Daten nach der Segmentierung. Warum müssen wir die Datenbank in verschiedene Tabellen aufteilen?Untertabelle Wenn die Datenmenge in einer einzelnen Tabelle zu groß ist, wird die Leistung der SQL-Ausführung erheblich beeinträchtigt. Wenn eine einzelne Tabelle mehrere Millionen erreicht, ist die Leistung im Allgemeinen relativ schlecht und dann ist es notwendig, die Tabelle in Untertabellen aufzuteilen. Beim Aufteilen von Tabellen werden die Daten einer Tabelle in mehrere Tabellen aufgeteilt und anschließend nur eine Tabelle abgefragt. Teilen Sie die Tabelle beispielsweise nach der Projekt-ID auf: Platzieren Sie eine feste Anzahl von Projektdaten in einer Tabelle, sodass die Datenmenge in jeder Tabelle innerhalb eines kontrollierbaren Bereichs gesteuert werden kann. Teilbibliothek Erfahrungsgemäß muss eine Datenbank erweitert werden, wenn sie maximal 2000 gleichzeitige Anfragen unterstützt, und der Gleichzeitigkeitswert einer gesunden Einzeldatenbank sollte am besten bei etwa 1000 gehalten werden. Anschließend können Sie die Daten einer Bibliothek auf mehrere Bibliotheken aufteilen und müssen beim Zugriff nur auf eine Bibliothek zugreifen. Dies nennt man Sharding der Datenbank und der Tabellen. Warum müssen wir die Datenbank und die Tabellen sharden?
So teilen Sie die Datenbank und die Tabelle aufSchauen Sie sich direkt das Bild an: Bei vertikaler Aufteilung wird empfohlen, die Tabelle bereits zu Beginn der Systemgestaltung sorgfältig zu entwerfen, um eine vertikale Aufteilung der Tabelle zu vermeiden. Die horizontale Aufteilung kann nach Bereich oder nach einem bestimmten Feld-Hash erfolgen. Der Vorteil der Division nach Bereich besteht darin, dass die Kapazitätserweiterung einfach ist und Sie nur eine neue Tabelle oder Datenbank vorbereiten müssen. Allerdings können dadurch leicht Probleme entstehen, daher sollte es bei der tatsächlichen Verwendung in Kombination mit Geschäftsszenarien betrachtet werden. Der Vorteil der Division durch Hash besteht darin, dass der Anforderungsdruck jeder Datenbank oder Tabelle gleichmäßig verteilt werden kann. Der Nachteil besteht darin, dass die Kapazitätserweiterung schwierig ist und die vorherigen Daten erneut gehasht werden müssen, was einen Datenmigrationsprozess beinhaltet. Probleme durch ShardingUnterdatenbanken und Untertabellen können den Druck auf Netzwerk-E/A, Hardwareressourcen und die Anzahl der Verbindungen, die von einer einzelnen Maschine und einer einzelnen Datenbank bereitgestellt werden, effektiv verringern. Aber es brachte auch einige Probleme mit sich.
DatenmigrationEs werden zwei Datenmigrationslösungen vorgestellt. Die einfachste Lösung besteht darin, das System für eine Weile herunterzufahren, ein vorgefertigtes Datenimporttool zu verwenden, um die Daten aus einer einzelnen Tabelle zu extrahieren und sie in die Unterbibliothek und Untertabelle zu schreiben. Die zweite Lösung klingt zuverlässiger, die Dual-Write-Migrationslösung. Im Online-System werden alle Stellen, an denen zuvor Daten geschrieben wurden, die Hinzufügungs-, Lösch- und Änderungsvorgänge zusätzlich zum Hinzufügen, Löschen und Ändern der alten Datenbank zum Hinzufügen, Löschen und Ändern der neuen Datenbank hinzugefügt. Dies ist das sogenannte Doppelschreiben. Führen Sie nach der Bereitstellung des Systems das Datenimporttool in Lösung 1 aus, um die alte Datenbank zu lesen und die neue Datenbank zu schreiben. Beim Schreiben sollte der letzte Änderungszeitpunkt der Daten anhand von Feldern wie gmt_modified ermittelt werden. Die Daten werden nur geschrieben, wenn die neue Datenbank die Daten nicht enthält oder die Daten neuer sind als die Daten der neuen Datenbank. Einfach ausgedrückt ist es nicht zulässig, neue Daten mit alten Daten zu überschreiben. Nach einer Schreibrunde können immer noch Inkonsistenzen vorhanden sein. In diesem Fall führt das Programm automatisch eine neue Überprüfungsrunde durch und vergleicht jedes Datenelement in jeder Tabelle der neuen und alten Datenbank. Wenn es Unterschiede gibt, liest das Programm die Daten aus der alten Datenbank und schreibt sie erneut. Wiederholen Sie den Zyklus, bis die Daten vollständig konsistent sind. MiddlewareDie gebräuchlichere Middleware für Unterbibliotheken und Untertabellen ist:
Zusammenfassend sind Sharding-jdbc und Mycat die Optionen, die in Betracht gezogen werden können. Die Vorteile von Client-Layer-Lösungen wie Sharding-jdbc bestehen darin, dass keine Bereitstellung erforderlich ist, geringe Betriebs- und Wartungskosten anfallen, keine sekundäre Weiterleitung auf der Proxy-Ebene erforderlich ist und eine hohe Leistung gewährleistet ist. Der Nachteil ist die Kopplung. MySQL-Partitionierung (veraltet) Die Partitionierung wird hier hauptsächlich eingeführt, um Verwechslungen mit Konzepten wie Aufteilen, Datenbank- und Tabellen-Sharding usw. zu vermeiden.
Hier ist ein Beispiel für eine LIST-Partition: Tabelle erstellen orders_list ( id INT AUTO_INCREMENT, Kunde_Nachname VARCHAR(30), Store-ID INT, Verkäufer-ID INT, Bestelldatum DATUM, Beachten Sie VARCHAR(500), INDEX idx (ich würde) ) ENGINE = INNODB PARTITION BY LIST(store_id) ( PARTITION p1 WERTE IN (1, 3, 4, 17) INDEX-VERZEICHNIS = "/var/orders/district1" DATENVERZEICHNIS = '/var/orders/district1', TEILUNG p2 WERTE IN (2, 12, 14) INDEX-VERZEICHNIS = "/var/orders/district2" DATENVERZEICHNIS = '/var/orders/district2', PARTITION p3 WERTE IN (6, 8, 20) INDEX-VERZEICHNIS = "/var/orders/district3" DATENVERZEICHNIS = '/var/orders/district3', TEILUNG p4 WERTE IN (5, 7, 9, 11, 16) INDEX-VERZEICHNIS = "/var/orders/district4" DATENVERZEICHNIS = '/var/orders/district4', TEILUNG p5 WERTE IN (10, 13, 15, 18) INDEX-VERZEICHNIS = "/var/orders/district5" DATENVERZEICHNIS = '/var/orders/district5' ); Vorteile der Partitionierung:
ZusammenfassenDies ist das Ende dieses Artikels über MySQL-Sharding. 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:
|
<<: Zen-Codierung für Editplus – Beispielcodebeschreibung
>>: js implementiert benutzerdefinierte Dropdown-Box
Laden Sie MySQL 5.7.20 / 5.7.21 herunter, install...
Dies ist ein Effekt, der ausschließlich mit CSS e...
Beim Exportieren von Daten in Operationen ist das...
Die Verwendung von Vue + ElementUI Tree dient zu ...
01. Befehlsübersicht md5sum - MD5-Prüfcode berech...
Ersetzen Sie ihn durch den optimalen Datenbankver...
Inhaltsverzeichnis Vorwort Ajax seriell und paral...
Vorwort Ich habe heute eine kleine Demo geschrieb...
Wir haben bereits darüber gesprochen, wie man ein...
Inhaltsverzeichnis Vorwort Verwenden Sie keine Ze...
weniger Dateiname Datei anzeigen kleiner Dateinam...
In diesem Beispiel wird jQuery verwendet, um eine...
Es gibt zwei Möglichkeiten, CSV in Win10 zu expor...
Inhaltsverzeichnis Ergebnisse erzielen Einführung...
Vorwort Der SQL-Modus wirkt sich auf die von MySQ...