1. Warum müssen wir Tabellen und Partitionen aufteilen? Bei der täglichen Entwicklung stoßen wir häufig auf große Tabellen. Die sogenannten großen Tabellen beziehen sich auf Tabellen, in denen Millionen oder sogar Dutzende Millionen Datensätze gespeichert sind. Eine solche Tabelle ist zu groß, wodurch die Abfrage- und Einfügevorgänge in der Datenbank zu lange dauern, was zu einer schlechten Leistung führt. Wenn eine gemeinsame Abfrage beteiligt ist, ist die Leistung noch schlechter. Der Zweck der Tabellensharding und Tabellenpartitionierung besteht darin, die Belastung der Datenbank zu verringern und die Effizienz der Datenbank zu verbessern. Im Allgemeinen soll dadurch die Effizienz beim Hinzufügen, Löschen, Ändern und Überprüfen von Tabellen verbessert werden. 2. Was sind Tabellen-Sharding und -Partitionierung? 2.1 Untertabelle Beim Tabellen-Sharding wird eine große Tabelle nach bestimmten Regeln in mehrere Entitätstabellen mit unabhängigem Speicherplatz zerlegt. Wir können sie Untertabellen nennen. Jede Tabelle entspricht drei Dateien: MYD-Datendatei, .MYI-Indexdatei und .frm-Tabellenstrukturdatei. Diese Untertabellen können auf derselben Festplatte oder auf verschiedenen Maschinen verteilt sein. Beim Lesen und Schreiben ruft die App den entsprechenden Untertabellennamen gemäß den vordefinierten Regeln ab und verarbeitet ihn dann. 2.2 Partitionierung Die Partitionierung ähnelt der Tabellenteilung. In beiden Fällen werden Tabellen nach Regeln zerlegt. Der Unterschied besteht darin, dass beim Table-Sharding eine große Tabelle in mehrere unabhängige physische Tabellen aufgeteilt wird, während beim Partitionieren die Daten in Segmente aufgeteilt und an mehreren Orten gespeichert werden, die sich auf derselben Festplatte oder auf verschiedenen Rechnern befinden können. Nach der Partitionierung handelt es sich oberflächlich betrachtet immer noch um eine Tabelle, die Daten werden jedoch an mehrere Speicherorte gehasht. Wenn die App liest und schreibt, arbeitet sie weiterhin mit dem großen Tabellennamen und die Datenbank organisiert die partitionierten Daten automatisch. 2.3 Welche Verbindung besteht zwischen MySQL-Tabellen-Sharding und Partitionierung? 1) Beide können die Leistung von MySQL verbessern und weisen unter Bedingungen hoher Parallelität eine gute Leistung auf. 3. Mehrere Möglichkeiten, die Tabelle aufzuteilen 3.1 MySQL Cluster Es handelt sich zwar nicht um eine Untertabelle, sie spielt jedoch die gleiche Rolle wie eine Untertabelle. Der Cluster kann die Anzahl der Datenbankoperationen teilen und die Aufgaben auf mehrere Datenbanken verteilen. Der Cluster kann Lesen und Schreiben trennen, um den Lese- und Schreibdruck zu reduzieren. Dies verbessert die Datenbankleistung. 3.2 Benutzerdefinierte Regeltabelle Große Tabellen können entsprechend den Geschäftsregeln in mehrere Untertabellen zerlegt werden. Normalerweise gibt es folgende Typen, Sie können jedoch auch eigene Regeln definieren. Bereich – Dieser Modus ermöglicht Ihnen, Ihre Daten in verschiedene Bereiche zu unterteilen. Beispielsweise kann eine Tabelle nach Jahren in mehrere Abschnitte unterteilt werden. Die Regeln zur Tabellenaufteilung sind dieselben wie die Partitionierungsregeln und werden im Partitionierungsmodul ausführlich vorgestellt. Nachfolgend finden Sie eine kurze Einführung in die Aufteilung der Tabelle (nach Jahr) mithilfe von „Bereich“. Angenommen, die Tabellenstruktur hat 4 Felder: Auto-Increment-ID, Name, Einzahlungsbetrag, Einzahlungsdatum. Verwenden Sie das Einzahlungsdatum als Regel, um die Tabelle aufzuteilen und mehrere Tabellen separat zu erstellen. var getTableName = function() { var Daten = { Name: 'Tom', Geld: 2800,00, Datum: '201410013059' }; var Tabellenname = "Konto_"; var Jahr = parseInt(data.date.substring(0, 4)); wenn (Jahr < 2012) { Tabellenname += 2011; // Konto_2011 } sonst wenn (Jahr < 2013) { Tabellenname += 2012; // Konto_2012 } sonst wenn (Jahr < 2014) { Tabellenname += 2013; // Konto_2013 } sonst wenn (Jahr < 2015) { Tabellenname += 2014; // Konto_2014 } anders { Tabellenname += 2015; // Konto_2015 } Tabellennamen zurückgeben; } 3.3 Verwenden der Merge-Storage-Engine zum Implementieren von Tabellen-Sharding Die Zusammenführungstabelle ist in eine Haupttabelle und eine Untertabelle unterteilt. Die Haupttabelle ist wie eine Hülle, die die Untertabelle logisch kapselt. Tatsächlich werden alle Daten in der Untertabelle gespeichert. Wir können Daten über die Haupttabelle einfügen und abfragen. Wenn wir die Regeln der Untertabellen kennen, können wir die Untertabellen auch direkt bedienen. Untertabelle 2011 CREATE TABLE `account_2011` ( `id` int(11) NICHT NULL AUTO_INCREMENT , `name` varchar(50) ZEICHENSATZ utf8 SORTIMENT utf8_general_ci NULL STANDARD NULL , `Geld` float NICHT NULL, `tradeDate` datetime NICHT NULL PRIMÄRSCHLÜSSEL (`id`) ) ENGINE=MyISAM STANDARDZEICHENSATZ=utf8 COLLATE=utf8_general_ci AUTO_INCREMENT=2 PRÜFSUMME=0 ROW_FORMAT=DYNAMISCH DELAY_KEY_WRITE = 0 ; Untertabelle 2012 CREATE TABLE `account_2012` ( `id` int(11) NICHT NULL AUTO_INCREMENT , `name` varchar(50) ZEICHENSATZ utf8 SORTIMENT utf8_general_ci NULL STANDARD NULL , `Geld` float NICHT NULL, `tradeDate` datetime NICHT NULL PRIMÄRSCHLÜSSEL (`id`) ) ENGINE=MyISAM STANDARDZEICHENSATZ=utf8 COLLATE=utf8_general_ci AUTO_INCREMENT=2 PRÜFSUMME=0 ROW_FORMAT=DYNAMISCH DELAY_KEY_WRITE = 0 ; Haupttabelle, alle Jahre Tabelle „account_all“ erstellen ( `id` int(11) NICHT NULL AUTO_INCREMENT , `name` varchar(50) ZEICHENSATZ utf8 SORTIMENT utf8_general_ci NULL STANDARD NULL , `Geld` float NICHT NULL, `tradeDate` datetime NICHT NULL PRIMÄRSCHLÜSSEL (`id`) ) ENGINE=MRG_MYISAM STANDARDZEICHENSATZ=utf8 COLLATE=utf8_general_ci UNION = (`Konto_2011`,`Konto_2012`) INSERT_METHOD=LETZTE ROW_FORMAT=DYNAMISCH ; Beim Erstellen der Haupttabelle gibt es eine INSERT_METHOD, die die Einfügemethode angibt. Die Werte können sein: 0: kein Einfügen erlaubt; FIRST: Einfügen in die erste Tabelle in der UNION; LAST: Einfügen in die letzte Tabelle in der UNION. Wenn Sie eine Abfrage über die Haupttabelle durchführen, entspricht dies einer gemeinsamen Abfrage aller Untertabellen. Dies spiegelt nicht die Vorteile von Untertabellen wider. Es wird empfohlen, Untertabellen abzufragen. 4. Verschiedene Möglichkeiten der Partitionierung 4.1 Reichweite Tabellenbereich erstellen( Ich würde int(11), Geld int(11) unsigniert nicht null, Datum Datumzeit )Partition nach Bereich(Jahr(Datum))( Partition p2007 Werte kleiner als (2008), Partition p2008 Werte kleiner als (2009), Partition p2009 Werte kleiner als (2010) Partition p2010-Werte kleiner als der Maximalwert ); 4.2 Liste Tabellenliste erstellen( ein int(11), b int(11) )(Partition nach Liste (b) partitionieren Sie p0-Werte in (1,3,5,7,9), Partitionieren Sie die p1-Werte in (2,4,6,8,0) ); 4.3 Hash Tabellen-Hash erstellen( ein int(11), b Datum/Uhrzeit )Partition nach Hash (JAHR(b) Trennwände 4; 4.4 Schlüssel Tabelle t_key erstellen( ein int(11), b Datum/Uhrzeit) Partitionierung nach Schlüssel (b) Trennwände 4; 4.5 Partitionsverwaltung 4.5.1 Neue Partition hinzufügen ALTER TABLE sale_data PARTITION HINZUFÜGEN (PARTITION p201010 WERTE KLEINER ALS (201011)); 4.5.2 Löschen einer Partition Wenn eine Partition gelöscht wird, werden auch alle Daten in der Partition gelöscht. ALTER TABLE sale_data DROP PARTITION p201010; 4.5.3 Partitionen zusammenführen Das folgende SQL fügt p201001 - p201009 in 3 Partitionen zusammen: p2010Q1 - p2010Q3 ALTER TABLE sale_data PARTITION NEU ORGANISIEREN p201001,p201002,p201003, p201004,p201005,p201006, p201007, p201008, p201009 IN ( PARTITION p2010Q1 WERTE WENIGER ALS (201004), PARTITION p2010Q2 WERTE WENIGER ALS (201007), PARTITION p2010Q3 WERTE KLEINER ALS (201010) ); Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: Fünf Möglichkeiten zur Implementierung der Vererbung in js
>>: So ändern Sie Port 3389 des Remotedesktops von Windows Server 2008 R2
Inhaltsverzeichnis Vorwort Aufzählbare Eigenschaf...
Systemumgebung: Redis-Version: 6.0.8 Docker-Versi...
NProgress ist der Fortschrittsbalken, der oben im...
Es gibt viele XHTML-Tags: div, ul, li, dl, dt, dd...
Vorwort Dieser Artikel enthält 1. Mehrere wesentl...
Was ist Pip pip ist ein Python-Paketverwaltungsto...
Inhaltsverzeichnis Klasse void zeigen ES6-Pfeilfu...
Einführung Wenn wir die MySQL-Datenbank verwenden...
Inhaltsverzeichnis Erster Schritt der Installatio...
Inhaltsverzeichnis Was ist die Picker-Komponente ...
Bei der Entwicklung von Web-Frontends entwerfen U...
Downloadadresse der offiziellen MySQL-Website: ht...
Vorwort: Ich habe das geschrieben, weil ich meine...
Verfahren: Nach Beschreibung: Beides kann nicht e...
Xiaobai lernte Vue kennen, dann lernte er Webpack...