#826

Eine Job-Queue bauen, die sauber horizontal skaliert

In der Datenbank gibt es eine Job-Queue — die Tabelle jobs mit dem Status pending für die noch nicht ausgeführten Zeilen. Fünf Worker schauen gleichzeitig darauf: Jeder möchte den ältesten Job greifen und ihn als „in Bearbeitung" markieren. Eine gewöhnliche zeilenbezogene Sperre mit einem Limit führt dazu, dass sich alle fünf Worker auf derselben Zeile stauen und serialisiert werden. Die Abhilfe besteht darin, die bereits gesperrten Zeilen zu überspringen und die nächste freie zu nehmen: Jeder Worker erhält seinen eigenen Job, und die Parallelität funktioniert ohne Kollisionen. jobs(id SERIAL, status, payload) enthält vier pending-Zeilen (a, b, c, d). Greife aus jobs einen pending-Job mit der kleinsten ID und setze ihn auf running — die anderen drei bleiben pending.

Dein Abfrageergebnis erscheint hier