Wann man dazu greift
- Große Eingaben in unabhängige Chunks aufgeteilt werden können.
- Aggregationslogik klar definierbar ist.
- Durchsatz-Skalierbarkeit kritisch ist.
/pattern/map-reduce/
Eine große Aufgabe wird auf unabhängige Chunks gemappt und anschließend zu einem einzigen Ergebnis aggregiert oder reduziert.
Wann man dazu greift
Wann es nach hinten losgeht
Die Abwägung
Hervorragende Skalierungsfähigkeiten werden gegen das Risiko inkonsistenter Teilergebnisse erkauft.
Die Eingabe wird aufgeteilt, parallel gemappt und dann reduziert.
Der Reducer sieht nur die Ausgaben pro Chunk und übersieht Beziehungen, die Chunk-Grenzen überspannen.
Lösung · Chunk-Metadaten (Position, Überlappung) in die Mapper-Ausgabe einbeziehen oder einen zweistufigen Reducer verwenden, der zuerst Grenzen abgleicht.
Ein Chunk ist 10-mal größer als die anderen. Sein Mapper dominiert die Latenz und der gesamte Auftrag wartet.
Lösung · Dynamische Chunk-Größenanpassung oder einen größenbewussten Splitter verwenden, der Last gleichmäßig auf Mapper verteilt.
Patterns, Frameworks und Seiten durchsuchen.