Sharding
Sharding ist die Praxis der Optimierung von Datenbankmanagementsystemen, indem die Zeilen oder Spalten einer größeren Datenbanktabelle in mehrere kleinere Tabellen aufgeteilt werden. Die neuen Tabellen werden „Shards“ (oder Partitionen) genannt, und jede neue Tabelle hat entweder dasselbe Schema, aber eindeutige Zeilen (wie beim „horizontalen Sharding“) oder ein Schema, das eine richtige Teilmenge des Schemas der ursprünglichen Tabelle ist (wie beim „vertikalen Sharding“).
Warum wird Sharding verwendet?
Sharding ist ein gängiges Konzept in skalierbaren Datenbankarchitekturen. Durch das Sharding einer größeren Tabelle können Sie die neuen Datenblöcke, sogenannte logische Shards, auf mehreren Knoten speichern, um horizontale Skalierbarkeit und verbesserte Leistung zu erzielen. Sobald der logische Shard auf einem anderen Knoten gespeichert ist, wird er als physischer Shard bezeichnet.
Wenn Sie eine Datenbank auf einem einzelnen Computer ausführen, erreichen Sie schließlich die Grenze der Rechenressourcen, die Sie auf Abfragen anwenden können, und Sie erreichen offensichtlich eine maximale Datenmenge, mit der Sie effizient arbeiten können. Durch die horizontale Skalierung können Sie ein flexibles Datenbankdesign aktivieren, das die Leistung auf zwei wichtige Arten erhöht:
- Mit Massively Parallel Processing können Sie alle Rechenressourcen in Ihrem Cluster für jede Abfrage nutzen.
- Da die einzelnen Shards kleiner sind als die logische Tabelle als Ganzes, muss jede Maschine weniger Zeilen scannen, wenn sie auf eine Abfrage antwortet.
Horizontales Sharding ist wirksam, wenn Abfragen dazu neigen, eine Teilmenge von Zeilen zurückzugeben, die häufig gruppiert sind. Beispielsweise sind Abfragen, die Daten basierend auf kurzen Datumsbereichen filtern, ideal für horizontales Sharding, da der Datumsbereich die Abfrage notwendigerweise auf eine Teilmenge der Server beschränkt.
Vertikales Sharding ist wirksam, wenn Abfragen dazu neigen, nur eine Teilmenge von Spalten der Daten zurückzugeben. Wenn beispielsweise einige Abfragen nur Namen und andere nur Adressen anfordern, können die Namen und Adressen auf separaten Servern geteilt werden.
Außerdem können Sharded-Datenbanken eine höhere Verfügbarkeit bieten. Bei einem Ausfall einer nicht gesicherten Datenbank ist die gesamte Anwendung unbrauchbar. Bei einer geteilten Datenbank sind nur die Teile der Anwendung unbrauchbar, die sich auf die fehlenden Datenblöcke verlassen haben. In der Praxis mildern Sharded-Datenbanken die Auswirkungen solcher Ausfälle häufig weiter ab, indem Sicherungs-Shards auf zusätzlichen Knoten repliziert werden.
Was ist der Unterschied zwischen Sharding und Partitionierung?
Bei Sharding und Partitionierung geht es darum, einen großen Datensatz in kleinere Teilmengen aufzuteilen. Der Unterschied besteht darin, dass Sharding bedeutet, dass die Daten auf mehrere Computer verteilt sind, während die Partitionierung dies nicht tut. Bei der Partitionierung geht es darum, Teilmengen von Daten innerhalb einer einzelnen Datenbankinstanz zu gruppieren. In vielen Fällen werden die Begriffe Sharding und Partitionierung sogar synonym verwendet, insbesondere wenn die Begriffe „horizontal“ und „vertikal“ vorangestellt sind.“ Daher können „horizontales Sharding“ und „horizontale Partitionierung“ dasselbe bedeuten.
Verwandte Themen
In-Memory-Berechnung
Edge Computing
Grid Computing
Weiterführende Literatur
Hazelcast IMDG 3.12 stellt das CP-Subsystem vor