Ich habe kürzlich über skalierbare Architekturen gelesen. In diesem Zusammenhang sind zwei Wörter, die in Bezug auf Datenbanken immer wieder auftauchen, Sharding und Partitionierung . Ich habe nach Beschreibungen gesucht, war aber immer noch verwirrt.
Könnten mir die Experten von stackoverflow helfen, die Grundlagen richtig zu machen?
- Was ist der Unterschied zwischen Sharding und Partitionierung ?
- Stimmt es, dass "alle Sharded-Datenbanken im Wesentlichen partitioniert sind (über verschiedene Knoten), aber alle partitionierten Datenbanken nicht unbedingt Sharded sind" ?
mysql
sharding
database-partitioning
Amit Sharma
quelle
quelle
Antworten:
Partitionierung ist eher ein Oberbegriff für die Aufteilung von Daten auf Tabellen oder Datenbanken. Sharding ist eine bestimmte Art der Partitionierung, die Teil der sogenannten horizontalen Partitionierung ist.
Hier replizieren Sie das Schema über (normalerweise) mehrere Instanzen oder Server, wobei Sie eine Art Logik oder Kennung verwenden, um zu wissen, welche Instanz oder welcher Server nach den Daten suchen soll. Eine Kennung dieser Art wird oft als "Shard Key" bezeichnet.
Eine übliche Logik ohne Schlüssel besteht darin, das Alphabet zum Teilen der Daten zu verwenden. AD ist Instanz 1, EG ist Instanz 2 usw. Kundendaten sind dafür gut geeignet, werden jedoch in der Größe zwischen Instanzen etwas falsch dargestellt, wenn bei der Partitionierung nicht berücksichtigt wird, dass einige Buchstaben häufiger als andere sind.
Eine andere übliche Technik besteht darin, ein Schlüsselsynchronisationssystem oder eine Logik zu verwenden, die eindeutige Schlüssel über die Instanzen hinweg sicherstellt.
Ein bekanntes Beispiel, das Sie studieren können, ist, wie Instagram die Partitionierung in den frühen Tagen gelöst hat (siehe Link unten). Sie wurden zunächst auf sehr wenigen Servern partitioniert und verwendeten Postgres, um die Daten von Anfang an zu teilen. Ich glaube, es waren mehrere tausend logische Scherben auf diesen wenigen physischen Scherben. Lesen Sie hier ihren großartigen Artikel aus dem Jahr 2012: Instagram Engineering - Sharding & IDs
Siehe auch hier: http://www.quora.com/Whats-the-difference-between-sharding-and-partition
quelle
Sieht so aus, als würde dies Ihre beiden Fragen beantworten:
Quelle: Wiki-Shard .
Quelle: MongoDB .
quelle
Ich habe mich auch damit befasst und obwohl ich bei weitem die Referenz in dieser Angelegenheit bin, gibt es einige wichtige Fakten, die ich gesammelt habe, und Punkte, die ich gerne teilen möchte:
Eine Partition ist eine Aufteilung einer logischen Datenbank oder ihrer Bestandteile in verschiedene unabhängige Teile. Datenbank Partitionierung wird in der Regel für die Verwaltbarkeit, Leistung oder Verfügbarkeit Gründen erfolgt, wie für den Lastausgleich.
https://en.wikipedia.org/wiki/Partition_(database)
Sharding ist eine Art der Partitionierung, z. B. Horizontal Partitioning (HP).
Es gibt auch eine vertikale Partitionierung (VP), bei der Sie eine Tabelle in kleinere Teile aufteilen. Bei der Normalisierung werden auch Spalten auf Tabellen aufgeteilt, aber die vertikale Partitionierung geht darüber hinaus und partitioniert Spalten, selbst wenn sie bereits normalisiert sind.
https://en.wikipedia.org/wiki/Shard_(database_architecture)
Ich mag Tony Bacos Antwort auf Quora sehr, wo er Sie dazu bringt, in Schemata zu denken (anstatt in Spalten und Zeilen). Er behauptet, dass...
" Horizontale Partitionierung " oder Sharding repliziert [kopiert] das Schema und teilt die Daten dann basierend auf einem Shard-Schlüssel.
Bei der " vertikalen Partitionierung " wird das Schema aufgeteilt (und die Daten werden für die Fahrt mitgeführt).
https://www.quora.com/Was-der-Differenz- zwischen-sharding-DB-tables-and-partitioning-them
Das Oracle Database Partitioning Guide enthält einige nette Zahlen. Ich habe einige Auszüge aus dem Artikel kopiert.
https://docs.oracle.com/cd/B28359_01/server.111/b32024/partition.htm
Wann muss eine Tabelle partitioniert werden?
Hier einige Vorschläge, wann eine Tabelle partitioniert werden soll:
Partitionsschnitt
Das Bereinigen von Partitionen ist das einfachste und auch wesentlichste Mittel, um die Leistung mithilfe der Partitionierung zu verbessern. Das Bereinigen von Partitionen kann die Abfrageleistung häufig um mehrere Größenordnungen verbessern. Angenommen, eine Anwendung enthält eine Auftragstabelle, die einen historischen Auftragsdatensatz enthält, und diese Tabelle wurde nach Wochen aufgeteilt. Eine Abfrage, bei der Bestellungen für eine einzelne Woche angefordert werden, greift nur auf eine einzelne Partition der Tabelle "Bestellungen" zu. Wenn die Tabelle "Bestellungen" historische Daten für 2 Jahre enthält, greift diese Abfrage auf eine Partition anstatt auf 104 Partitionen zu. Diese Abfrage kann möglicherweise 100-mal schneller ausgeführt werden, allein aufgrund des Bereinigens von Partitionen.
Partitionierungsstrategien
Sie können ihren Text lesen und ihre Bilder visualisieren, die alles ziemlich gut erklären.
Und schließlich ist es wichtig zu verstehen, dass Datenbanken äußerst ressourcenintensiv sind:
Viele Datenbankadministratoren partitionieren auf demselben Computer, auf dem die Partitionen alle Ressourcen gemeinsam nutzen, aber durch Aufteilen der Daten und / oder des Index eine Verbesserung der Festplatte und der E / A bewirken.
Während andere Strategien eine "Shared Nothing" -Architektur verwenden, befinden sich die Shards auf separaten und unterschiedlichen Recheneinheiten (Knoten), die 100% der CPU, der Festplatte, der E / A und des Speichers für sich haben. Bereitstellung eigener Vorteile und Komplexitäten.
https://en.wikipedia.org/wiki/Shared_nothing_architecture
quelle
Betrachten Sie eine Tabelle in einer Datenbank mit 1 Million Zeilen und 100 Spalten. Bei der Partitionierung können Sie die Tabelle in zwei oder mehr Tabellen mit folgenden Eigenschaften unterteilen:
0,4 Millionen Zeilen (Tabelle 1), 0,6 Millionen Zeilen (Tabelle 2)
1 Million Zeilen und 60 Spalten (Tabelle 1) und 1 Million Zeilen und 40 Spalten (Tabelle 2)
Es könnte mehrere solche Fälle geben
Dies ist eine allgemeine Partitionierung
Aber Sharding nur bis 1. Fall beziehen , bei denen wir die Daten auf der Basis von Zeilen unterteilt wird . Wenn wir die Tabelle in mehrere Tabellen aufteilen, müssen wir mehrere ähnliche Kopien von Schemas verwalten, da wir jetzt mehrere Tabellen haben.
quelle
Sharding in einem speziellen Fall der horizontalen Partitionierung , wenn sich Partitionen über mehrere Datenbankinstanzen erstrecken. Wenn eine Datenbank sharded ist, bedeutet dies, dass sie per Definition partitioniert ist.
quelle
Wenn Sie über Partitionierung sprechen, verwenden Sie bitte nicht den Begriff Replikation oder Replikation. Die Replikation ist ein anderes Konzept und fällt nicht in den Geltungsbereich dieser Seite. Wenn wir über Partitionierung sprechen, dann ist besseres Wort Teilen und wenn wir über Scherben sprechen, dann ist besseres Wort Verteilen. In der Partition (normalerweise und nach allgemeinem Verständnis nicht immer) werden die Zeilen der Tabelle mit großen Datenmengen in zwei oder mehr disjunkte Gruppen (die keine Zeilen gemeinsam nutzen) unterteilt. Sie können jede Gruppe als Partition bezeichnen. Diese Gruppen oder alle Partitionen bleiben unter der Kontrolle einer einmaligen RDMB-Instanz, und dies ist alles logisch. Die Basis jeder Gruppe kann ein Hash oder ein Bereich usw. sein. Wenn Sie zehn Jahre Daten in einer Tabelle haben, können Sie alle Jahresdaten in einer separaten Partition speichern. Dies kann erreicht werden, indem Partitionsgrenzen auf der Grundlage von a festgelegt werden Nicht-Null-Spalte CREATE_DATE. Wenn Sie die Datenbank abfragen und ein Erstellungsdatum zwischen dem 01.01.1999 und dem 31.12.2000 angeben, werden nur zwei Partitionen getroffen und es wird sequentiell. Ich habe auf DB über Milliarden Datensätze ähnlich gemacht und die SQL-Zeit betrug 50 Millis von 30 Sekunden unter Verwendung von Indizes usw. alle. Sharding bedeutet, dass Sie jede Partition auf einem anderen Knoten / Computer hosten. Jetzt kann die Suche innerhalb der Partitionen / Shards parallel erfolgen.
quelle
Die horizontale Partition wird beim Verschieben in eine andere Datenbankinstanz * zu einem Datenbank-Shard .
Die Datenbankinstanz kann sich auf demselben Computer oder auf einem anderen Computer befinden.
quelle