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.