Große Datenmengen in Node.js streamen: Backpressure und asynchrone Generatoren

Die meisten APIs, die „in der Entwicklung einwandfrei funktionieren", tragen eine stille Zeitbombe in sich: Sie laden komplette Ergebnismengen in den Speicher, bevor sie überhaupt etwas damit tun. Bei tausend Zeilen fällt das nicht auf. Bei hunderttausend schießen die Antwortzeiten in die Höhe. Bei einer Million läuft der Prozess in ein OOM und reißt den Pod mit sich. Streams sind die Standardlösung — aber gerade bei den Implementierungsdetails, vor allem beim Backpressure, scheitern die meisten Versuche.

Das problematische Muster begegnet einem überall: