Sharding Pattern

Die Idee ist es große Datenmengen in mehrere horizontale "Splitter"(Shards) aufzuteilen, um die Skalierbarkeit zu verbessern.

When to use

Wenn die Daten die Ressourcen einer einzelnen Datenbank übersteigen werden. Um die Performance zu steigern, indem die Zugriffskonflikte minimiert werden.

Problemstellung

Eine Datenbank auf einem einzigen Server wird sich früher oder später mit den Folgenden Themen befassen müssen: Speicherplatz Rechenleistung Netzwerkbandbreite Datenverteilung

Diese Punkte durch "aufrüsten" auszubauen, verschiebt lediglich das Problem in die Zukunft.

Sharding als Lösung

Die Datenbank wird in mehrere Splitter aufgeteilt. Jeder Splitter verfügt über das gleiche Schema, enthält jedoch nur eine individuelle Menge der Gesamten Datenmenge.

Für das Aufteilen von Daten auf die einzelnen Splitter werden "shard keys" oder "partition keys" verwendet. Dieser Schlüssel muss statisch sein.

Sharding organisiert die Daten, die Logic sorgt bei einem Zugriff der Applikation dafür, das die angeforderten Daten aufgefunden werden.

Vorteile

Jederzeit erweiterbar, durch das Hinzufügen von weiteren Splittern. Zugriffskonflikte können reduziert und Performance gesteigert werden, durch ein Ausbalancieren des Workloads der einzelnen Splitter. In einer Cloudlösung können die Splitter "nah" am User platziert werden.

Nachteile

Daten der Splitter müssen ausgeglichen werden, um für eine hohe Performance zu sorgen.

Sharding Strategies

Für die Vergabe von "shard keys" und das Verteilen der Daten, gibt es 3 gängige Strategien, welche im Folgenden skizziert werden.

The Lookup strategy

Hier liegen alle benötigten Daten (für einen Teil einer Abfrage) auf einem einzigen Shard. Vorteile: Mehr Kontrolle über die Konfigurationen der Shards. Nachteile: Overhead durch das aufsuchen mehrere Speicherorte(Shards)

The Range strategy

Häufig zusammen abgefragte Daten, bspw. in einem Query, werden zusammen in einem Splitter gespeichert. Vorteile: Einfach zu implementieren. Einfaches Datenmanagement Nachteile: Keine optimale Balance zwischen den Shards. Rebalancing ist schwer.

The Hash strategy

Aus mehreren Attributen werden Hashes gebildet, welche abgefragt werden können. Durch diese Strategie soll ein Balance der Zugriffe unter den Shards erreicht werden. Dies ist vor allem sinnvoll in Umgebungen, mit sehr vielen Zugriffen. Vorteile: Hashermittlung kann Overhead erzeugen. Rebalancing ist schwer.

results matching ""

    No results matching ""