Sharding und Partitionierung
Kurz: Beim Sharding wird ein großer Datenbestand in Teile (Shards) aufgeteilt, die auf verschiedenen Servern liegen. So wachsen Speicher und Durchsatz mit der Servermenge.
Genauer: Ein Partitionsschlüssel entscheidet, welche Zeile in welchen Shard kommt. Gute Schlüssel verteilen Last gleichmäßig und halten zusammengehörige Daten beieinander. Abfragen über mehrere Shards sind teuer.
Im Detail
- Bereichs-Partitionierung: Z. B. A–F auf Server 1. Gut für Bereichsabfragen, Gefahr von Hotspots.
- Hash-Partitionierung: Hash des Schlüssels bestimmt den Shard. Gleichmäßig, aber Bereichsabfragen schwer.
- Consistent Hashing: Beim Hinzufügen von Servern wandert nur ein kleiner Teil der Daten.
- Rebalancing: Shards verschieben, wenn Server hinzukommen.
- Hot Keys: Ein sehr beliebiger Schlüssel überlastet einen Shard.
- Joins und Transaktionen: Über Shards hinweg aufwendig (siehe Saga, 2PC).
Siehe auch: Consistent Hashing, Verteilte Transaktionen: Zwei-Phasen-Commit und Saga