Was ist Tabellenpartitionierung und -partitionierung?MySql-Datenbankpartitionierung und Tabellenpartitionierungsmethode

Was ist Tabellenpartitionierung und -partitionierung?MySql-Datenbankpartitionierung und Tabellenpartitionierungsmethode

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.
Der Hauptzweck der Partitionierung besteht darin, die Gesamtmenge der gelesenen und geschriebenen Daten in einem bestimmten SQL-Vorgang zu reduzieren, um die Antwortzeit zu verkürzen.

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.
2) Tabellen-Sharding und -Partitionierung sind keine Widersprüche und können miteinander kooperieren. Für Tabellen mit hohem Datenverkehr und vielen Tabellendaten können wir Tabellen-Sharding und -Partitionierung kombinieren. Für Tabellen mit geringem Datenverkehr, aber vielen Tabellendaten können wir Partitionierung anwenden.
3) Die Tabellenpartitionierungstechnologie ist problematischer. Sie müssen Untertabellen manuell erstellen und der App-Server muss beim Lesen und Schreiben den Namen der Untertabelle berechnen. Es ist besser, die Zusammenführung zu verwenden, Sie müssen jedoch auch Untertabellen erstellen und Union-Beziehungen zwischen Untertabellen konfigurieren.
4) Im Vergleich zum Tabellen-Sharding ist die Tabellenpartitionierung einfach zu handhaben und erfordert nicht die Erstellung von Untertabellen.

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.
Hash – Dieser Modus ermöglicht es Ihnen, den Hash-Schlüssel einer oder mehrerer Spalten der Tabelle zu berechnen und dann die Datenbereiche nach den verschiedenen Werten des Hash-Codes zu partitionieren. Sie können beispielsweise eine Tabelle erstellen, die nach ihrem Primärschlüssel partitioniert ist.
Schlüssel – Eine Erweiterung des obigen Hash-Modus. Der Hash-Schlüssel wird hier vom MySQL-System generiert.
Liste – Dieser Modus ermöglicht dem System, Daten nach einer vordefinierten Werteliste zu partitionieren.
Composite Kombination der oben genannten Modi

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.
2011: Konto_2011
2012: Konto_2012

2015: Konto_2015
Beim Lesen und Schreiben sucht die App anhand des Datums den entsprechenden Tabellennamen, welcher manuell ermittelt werden muss.

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:
  • MySQL-Datenbankoptimierung: Detaillierte Erläuterung der Sharding-Operationen für Tabellen und Datenbanken
  • Zusammenfassung zum Sharding von MySQL-Datenbanken und -Tabellen
  • Anwendungsszenarien und Entwurfsmethoden für MySQL-Tabellen- und Datenbank-Sharding
  • MySQL-Datenbanktabelle und Datenbankpartitionierungsstrategie
  • MyBatis implementiert Mysql-Datenbank-Unterbibliotheks- und Untertabellenoperationen und -zusammenfassungen (empfohlen)
  • Zusammenfassung der Datenaufteilung in MySQL-Datenbanken: Unterbibliothek und Untertabelle
  • Methoden zur MySQL-Datenbankpartitionierung und Tabellenpartitionierung (häufig verwendet)
  • MySQL-Leistungsoptimierungs-Sharing (Sharding von Datenbanken und Tabellen)
  • Spezifische Implementierungsmethoden für MySQL-Tabellen-Sharding und -Partitionierung
  • Eine kurze Analyse des Unterschieds zwischen MySQL-Tabellen-Sharding und -Partitionierung
  • Einführung in die Wissenspunkte MySql-Tabelle, Datenbank, Sharding und Partitionierung

<<:  Fünf Möglichkeiten zur Implementierung der Vererbung in js

>>:  So ändern Sie Port 3389 des Remotedesktops von Windows Server 2008 R2

Artikel empfehlen

Detaillierte Diskussion der Unterschiede zwischen Schleifen in JavaScript

Inhaltsverzeichnis Vorwort Aufzählbare Eigenschaf...

So stellen Sie einen Redis 6.x-Cluster über Docker bereit

Systemumgebung: Redis-Version: 6.0.8 Docker-Versi...

Einführung in die Verschachtelungsregeln von HTML-Tags

Es gibt viele XHTML-Tags: div, ul, li, dl, dt, dd...

Detaillierte Erklärung der MySQL-Grundoperationen (Teil 2)

Vorwort Dieser Artikel enthält 1. Mehrere wesentl...

So aktualisieren Sie alle Python-Bibliotheken in Ubuntu 18.04 auf einmal

Was ist Pip pip ist ein Python-Paketverwaltungsto...

Die Fallstricke beim Erlernen von Vue.js

Inhaltsverzeichnis Klasse void zeigen ES6-Pfeilfu...

Globale Aufrufimplementierung von Vue2.x Picker auf mobilen Endgeräten

Inhaltsverzeichnis Was ist die Picker-Komponente ...

Drei Möglichkeiten zum Implementieren eines Textfarbverlaufs in CSS

Bei der Entwicklung von Web-Frontends entwerfen U...

So sortieren Sie eine Zeile oder Spalte in MySQL

Verfahren: Nach Beschreibung: Beides kann nicht e...

Zusammenfassung der Lösung für den Webpack -v-Fehler von Vue

Xiaobai lernte Vue kennen, dann lernte er Webpack...