Heim  >  Artikel  >  Datenbank  >  Ausführliche Erläuterung der MySQL-Datenbankpartitionierungs- und Tabellenpartitionierungsmethoden sowie Einführung in die Partitionierung und Tabellenpartitionierung

Ausführliche Erläuterung der MySQL-Datenbankpartitionierungs- und Tabellenpartitionierungsmethoden sowie Einführung in die Partitionierung und Tabellenpartitionierung

黄舟
黄舟Original
2017-03-29 13:49:201634Durchsuche

In diesem Artikel werden hauptsächlich MySql-Datenbankpartitionierungs- und Tabellenpartitionierungsmethoden im Detail vorgestellt. Außerdem erfahren Sie, was Tabellenpartitionierung und -partitionierung sind und welche Verbindung zwischen MySQL-Tabellenpartitionierung und -Partitionierung besteht. Es hat einen gewissen Referenzwert. Interessierte Freunde können darauf verweisen

1. Warum müssen wir Tabellen und Partitionen aufteilen

Wir stoßen bei der täglichen Entwicklung oft auf große Probleme Im Fall von Tabellen beziehen sich die sogenannten großen Tabellen auf Tabellen, die Millionen oder sogar Dutzende Millionen Datensätze speichern. Eine solche Tabelle ist zu groß, was dazu führt, dass die Datenbank zu lange zum Abfragen und zum Einfügen benötigt, was zu einer geringen Leistung führt. Wenn eine gemeinsame Abfrage beteiligt ist, wird die Leistung noch schlechter. Der Zweck der Tabellenpartitionierung und Tabellenpartitionierung besteht darin, die Belastung der Datenbank zu verringern und die Effizienz der Datenbank zu verbessern. Im Allgemeinen besteht sie darin, die Effizienz des Hinzufügens, Löschens, Änderns und Abfragens von Tabellen zu verbessern.

2. Was sind Untertabellen und Partitionen

2.1 Untertabellen

Sub -Tabellen zerlegen eine große Tabelle nach bestimmten Regeln in mehrere Entitätstabellen mit unabhängigem Speicherplatz. Jede Tabelle entspricht drei Dateien: MYD-Datendatei, .MYI-Indexdatei und .frm-Tabellenstrukturdatei . . Diese Untertabellen können auf derselben Festplatte oder auf verschiedenen Computern verteilt sein. Wenn die App liest und schreibt, ruft sie den entsprechenden Untertabellennamen gemäß den vordefinierten Regeln ab und führt ihn dann aus.

2.2 Partition

Partitionierung ähnelt der Tabellenpartitionierung, bei der Tabellen nach Regeln zerlegt werden. Der Unterschied besteht darin, dass bei der Tabellenaufteilung eine große Tabelle in mehrere unabhängige Entitätstabellen zerlegt wird, während bei der Partitionierung Daten in Segmente unterteilt und an mehreren Orten gespeichert werden, die sich auf derselben Festplatte oder auf verschiedenen Computern befinden können. Nach der Partitionierung befindet sich immer noch eine Tabelle auf der Oberfläche, die Daten werden jedoch an mehrere Speicherorte gehasht. Wenn die App liest und schreibt, verarbeitet sie weiterhin den großen Tabellennamen und die Datenbank organisiert automatisch die partitionierten Daten.

Der Hauptzweck der Partitionierung besteht darin, die Gesamtmenge der in einer bestimmten SQL-Operation gelesenen und geschriebenen Daten zu reduzieren, um die Antwortzeit zu verkürzen.

2.3 Welche Verbindung besteht zwischen MySQL-Tabellen und Partitionen?

1) kann die Leistung von MySQL verbessern und im Zustand hoher Parallelität

eine gute Leistung erzielen. 2) Tabellenunterteilung und Partitionierung sind nicht inkonsistent und können miteinander zusammenarbeiten. Für Tabellen mit großem Zugriffsvolumen und relativ großen Tabellendaten können wir Untertabelle und Partitionierung kombinieren Tabelle Für Tabellen mit vielen Daten können wir sie partitionieren.
3) Die Untertabellentechnologie ist problematischer. Sie müssen Untertabellen manuell erstellen und der App-Server muss die Untertabellennamen beim Lesen und Schreiben berechnen. Es ist besser, Merge zu verwenden, aber Sie müssen auch eine
Union-Beziehung zwischen Untertabellen erstellen und Untertabellen konfigurieren. 4) Im Vergleich zu Untertabellen ist die Tabellenpartitionierung einfach zu bedienen und erfordert keine Erstellung von Untertabellen.

3. Mehrere Möglichkeiten, Tabellen zu teilen

3.1 MySQL-Cluster

Es ist keine Untertabelle, spielt aber 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 verringern. Dadurch wird die Datenbankleistung verbessert.

3.2 Benutzerdefinierte Aufteilung der Regeltabelle

Eine große Tabelle kann entsprechend den Geschäftsregeln in mehrere Untertabellen zerlegt werden. Normalerweise gibt es die folgenden Typen, Sie können aber auch eigene Regeln definieren.

Range (Range) – Dieser Modus ermöglicht die Aufteilung der Daten in verschiedene Bereiche. Beispielsweise kann eine Tabelle nach Jahr in mehrere Partitionen unterteilt werden.
Hash (Hash) – Dieser Modus ermöglicht die Berechnung des Hash-Schlüssels einer oder mehrerer Spalten der Tabelle und übergibt schließlich diese Hash-Partition Datenbereiche, die unterschiedlichen Codewerten entsprechen. Sie können beispielsweise eine Tabelle erstellen, die den Primärschlüssel der Tabelle partitioniert.
Schlüssel (Schlüsselwert) – Eine Erweiterung des oben genannten Hash-Modus, der Hash-Schlüssel wird hier vom MySQL-System generiert.
Liste (vordefinierte Liste) – In diesem Modus kann das System Daten nach dem Wert einer vordefinierten Liste aufteilen.
Composite (Composite-Modus) Die Kombination der oben genannten Modi verwendet den

Untertabellenregel Wie Partitionierungsregeln werden sie im Partitionierungsmodul ausführlich beschrieben.


Im Folgenden wird Range verwendet, um kurz vorzustellen, wie die Tabelle unterteilt wird (gemäß der Jahrestabelle).

Angenommen, die Tabellenstruktur hat 4 Felder: Auto-Inkrement-ID, Name, Einzahlungsbetrag, Einzahlungsdatum
Verwenden Sie das Einzahlungsdatum als Regel, um die Tabellen zu unterteilen und jeweils mehrere Tabellen zu erstellen
2011: Konto_2011
2012 :account_2012
...
2015: account_2015
Die App sucht beim Lesen und Schreiben anhand des Datums nach dem entsprechenden Tabellennamen und muss manuell ermittelt werden.

var getTableName = function() {
  var data = {
    name: 'tom',
    money: 2800.00,
    date: '201410013059'
  };
  var tablename = 'account_';
  var year = parseInt(data.date.substring(0, 4));
  if (year < 2012) {
    tablename += 2011; // account_2011
  } else if (year < 2013) {
    tablename += 2012; // account_2012
  } else if (year < 2014) {
    tablename += 2013; // account_2013
  } else if (year < 2015) {
    tablename += 2014; // account_2014
  } else {
    tablename += 2015; // account_2015
  }
  return tablename;
}

3.3 Verwenden Sie die Merge-Speicher-Engine, um Untertabellen zu implementieren

Merge-Untertabellen sind in Haupttabellen und Untertabellen unterteilt. Die Haupttabelle ist ähnlich. Es handelt sich um eine Shell, die die Untertabelle logisch kapselt. Tatsächlich werden die 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) NOT NULL AUTO_INCREMENT ,
`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`money` float NOT NULL ,
`tradeDate` datetime NOT NULL
PRIMARY KEY (`id`)
)
ENGINE=MyISAM
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=2
CHECKSUM=0
ROW_FORMAT=DYNAMIC
DELAY_KEY_WRITE=0
;

Untertabelle 2012

CREATE TABLE `account_2012` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`money` float NOT NULL ,
`tradeDate` datetime NOT NULL
PRIMARY KEY (`id`)
)
ENGINE=MyISAM
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=2
CHECKSUM=0
ROW_FORMAT=DYNAMIC
DELAY_KEY_WRITE=0
;

Haupttabelle, alle Jahre

CREATE TABLE `account_all` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`money` float NOT NULL ,
`tradeDate` datetime NOT NULL
PRIMARY KEY (`id`)
)
ENGINE=MRG_MYISAM
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
UNION=(`account_2011`,`account_2012`)
INSERT_METHOD=LAST
ROW_FORMAT=DYNAMIC
;

Erstellen Sie die Haupttabelle. Manchmal dort ist eine INSERT_METHOD, die die Einfügemethode angibt. Der Wert 0 erlaubt keine Einfügung in die erste Tabelle in UNION;

Bei der Abfrage über die Haupttabelle entspricht dies der gemeinsamen Abfrage aller Untertabellen. Dies spiegelt nicht die Vorteile von Untertabellen wider. Es wird empfohlen, Untertabellen abzufragen.

4. Mehrere Möglichkeiten der Partitionierung

4.1 Bereich

create table range( 
  id int(11), 
  money int(11) unsigned not null, 
  date datetime 
  )partition by range(year(date))( 
  partition p2007 values less than (2008), 
  partition p2008 values less than (2009), 
  partition p2009 values less than (2010) 
  partition p2010 values less than maxvalue 
);

4.2 Liste

create table list( 
  a int(11), 
  b int(11) 
  )(partition by list (b) 
  partition p0 values in (1,3,5,7,9), 
  partition p1 values in (2,4,6,8,0) 
 );

4.3 Hash

create table hash( 
  a int(11), 
  b datetime 
  )partition by hash (YEAR(b) 
  partitions 4;

4.4 Schlüssel

create table t_key( 
  a int(11), 
  b datetime) 
  partition by key (b) 
  partitions 4;

4.5 Partitionsverwaltung

4.5.1 Neue Partition

ALTER TABLE sale_data
ADD PARTITION (PARTITION p201010 VALUES LESS THAN (201011));

4.5.2 Partition löschen

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ührt p201001 - p201009 in 3 Partitionen p2010Q1 - p2010Q3 zusammen

ALTER TABLE sale_data
REORGANIZE PARTITION p201001,p201002,p201003,
p201004,p201005,p201006,
p201007,p201008,p201009 INTO
(
PARTITION p2010Q1 VALUES LESS THAN (201004),
PARTITION p2010Q2 VALUES LESS THAN (201007),
PARTITION p2010Q3 VALUES LESS THAN (201010)
);

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der MySQL-Datenbankpartitionierungs- und Tabellenpartitionierungsmethoden sowie Einführung in die Partitionierung und Tabellenpartitionierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn