Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Warum teilen wir eine MySQL-Tabelle in viele kleinere Tabellen auf?

Ich glaube, Sie haben hier ein paar Begriffe verwechselt.

Alle Ihre Daten gehen in eine Datenbank (auch bekannt als Schema). In einer Datenbank können Sie Tabellen haben.

z. B.

table employee
   id integer
   name varchar
   address varchar
   country varchar

table office
   id integer
   employee_id integer
   address varchar

Innerhalb von Tabellen gibt es Felder (id, name, address) auch bekannt als Spalten.Und Tabellen haben eine oder mehrere Zeilen.
Ein Beispiel für Tabellenmitarbeiter:

id  name        address           country
----------------------------------------------------
1   John        1 Regent Street   UK
2   James       24 Jump Street    China
3   Darth Vader 1 Death Star      Bestine, Tatooine

So viel zu den Grundlagen.

Warum partitionieren
Nehmen Sie nun an, dass wir viele, viele Personen (Zeilen) in unserer Datenbank haben.
Denken Sie daran, dass dies eine galaktische Datenbank ist, also haben wir 100 Milliarden Datensätze.
Wenn wir so schnell suchen wollen es ist schön, wenn wir das parallel machen können.
Also partitionieren wir die Tabelle (sagen wir nach Land) und dann können wir x Server haben, die jeweils in 1 Land suchen.
Die Server-Partitionierung wird sharding .

Oder wir können z.B. historische Daten nach Jahr, sodass wir nicht alle durchgehen müssen die Daten nur, um die aktuellen zu erhalten Nachrichten. Wir müssen nur für dieses Jahr durch die Teilung gehen. Dies wird als partitioning bezeichnet .

Was ist der große Unterschied zwischen sharding kann nur partitioning ?

Splitter
Im sharding Sie erwarten das alle Ihre Daten sind relevant und werden mit gleicher Wahrscheinlichkeit abgefragt. (z. B. kann Google erwarten, dass alle ihre Daten abgefragt werden; die Archivierung eines Teils ihrer Daten ist für sie nutzlos).
In diesem Fall möchten Sie, dass viele Maschinen Ihre Daten parallel durchsehen, wobei jede Maschine einen Teil davon übernimmt Arbeit.
Also geben Sie jeder Maschine eine andere Partition (Shard) der Daten und geben allen Maschinen die gleiche Abfrage. Wenn die Ergebnisse herauskommen, UNION sie alle zusammen und geben das Ergebnis aus.

Grundlegende Partitionierung
Einfache partitioning ein Teil Ihrer Daten ist hot und Teil ist not . Ein typischer Fall sind historische Daten, die neuen Daten sind hot , die alten Daten werden kaum angerührt.
Für diesen Anwendungsfall ist es sinnlos, die alten Daten auf separaten Servern abzulegen. Diese Maschinen werden nur warten und warten und nichts tun, weil sich niemand um die alten Daten kümmert, außer einigen Prüfern, die sie einmal im Jahr ansehen.
Also partitionieren Sie diese Daten nach Jahr und der Server archiviert automatisch die alten Partitionen, damit Ihre Abfragen betrachten nur die Daten eines (vielleicht 2) Jahres und sind viel schneller.

Benötige ich eine Partitionierung?
Sie partitionieren nur, wenn Sie viele, viele Daten haben, da dies Ihre Einrichtung verkompliziert.
Wenn Sie nicht mehr als eine Million Datensätze haben, müssen Sie keine Partitionierung in Betracht ziehen.
Wenn Sie Wenn Sie mehr als 100 Millionen Datensätze haben, sollten Sie dies unbedingt in Betracht ziehen.

Weitere Informationen finden Sie unter:http://dev.mysql.com/ doc/refman/5.1/en/partitioning.html
und:http://blog.mayflower.de/archives/353-Ist-MySQL-Partitionierung-nützlich-bei-sehr-grossen-realen-problemen.html
Siehe auch Wiki:http://en.wikipedia.org/wiki /Partition_%28Datenbank%29

Dies sind nur meine persönlichen Heuristiken YMMV.