Entscheidung: Sharding oder Replikation (Skalierung)?
Die Skalierungsentscheidung hängt davon ab, ob der Engpass bei Lese- oder Schreibvorgängen liegt und ob die Daten auf einen einzelnen Knoten passen. Die falsche Strategie bedeutet unnötige Komplexität oder einen ungelösten Engpass. Dieser Baum erinnert zuerst an die günstigsten und einfachsten Optionen (vertikale Skalierung, Caching) und hilft dann bei der richtigen Wahl zwischen Read Replicas und Sharding.
Hast du zuerst den einfachsten Weg versucht: vertikale Skalierung und Query-Tuning?
Bevor du auf eine verteilte Architektur umsteigst, nimm den günstigsten Gewinn mit: Mehr Hardware (CPU/RAM/IOPS), fehlende Indizes ergänzen und teure Abfragen beheben löst die meisten Engpässe. Füge Komplexität erst hinzu, wenn das ausgeschöpft ist.
- Nein / ich habe das Limit noch nicht erreicht
- Ja, vertikale Skalierung und Tuning reichen nicht
Liegt der Engpass bei Lesevorgängen oder bei Schreibvorgängen/Datenvolumen?
Grenze die Ursache des Skalierungsproblems ein: Ersticken viele Leseabfragen einen einzelnen Knoten (leseintensiv), oder übersteigen Schreibrate oder Gesamtdatenmenge die Kapazität eines Knotens (schreib-/volumenintensiv)? Diese Unterscheidung ist der grundlegende Unterschied zwischen Replicas und Sharding.
- Lesetraffic dominiert, Schreibvorgänge passen auf einen Knoten
- Schreibrate oder Datenvolumen übersteigt einen Knoten
Sind die Lesevorgänge wiederholt/cachebar oder frisch und vielfältig?
Teile den Leseengpass noch einen Schritt weiter auf: Werden immer wieder dieselben Ergebnisse gelesen (ein Cache ist sehr wirksam), oder fordern Lesevorgänge vielfältige, breite und aktuelle Daten an (zusätzliche Lesekapazität nötig)? Das entscheidet zwischen einer Cache-Schicht und Read Replicas.
- Dieselben Daten werden wiederholt gelesen, leichte Veraltung ist akzeptabel
- Vielfältige/frische Lesevorgänge, reine Lesekapazität ist nötig
Empfehlung: zuerst vertikale Skalierung + Query-Tuning
Der erste und günstigste Weg vor einer verteilten Architektur. Mehr Hardware und korrigierte Abfragen/Indizes lösen die meisten Skalierungsprobleme, ohne Betriebskomplexität hinzuzufügen.
Empfehlung: Read Replicas (Leseskalierung)
Schreibvorgänge bleiben auf einem Knoten (dem Primary), während der Lesetraffic auf eine oder mehrere Replicas verteilt wird. Das ist der Standardweg, reine Lesekapazität und Ausfallsicherheit für leseintensive Workloads zu erhöhen.
Empfehlung: Cache-Schicht
Häufig erneut gelesene Ergebnisse in einer schnellen In-Memory-Schicht zu halten, senkt die Datenbanklast drastisch. Mit dem richtigen Muster antwortet sie, ohne zur Datenbank zu gehen, und senkt so Latenz und Last.
Empfehlung: Sharding (Schreib-/Datenskalierung)
Daten werden nach einem Shard Key aufgeteilt und auf mehrere unabhängige Knoten verteilt; jeder Knoten besitzt einen Teil der Daten und dessen Schreibvorgänge. Das ist der Weg, Schreibrate und Gesamtdatenvolumen zu skalieren, bringt aber erhebliche Komplexität.