#826

Zbuduj kolejkę zadań, która skaluje się bez kolizji

W bazie danych jest kolejka zadań — tabela jobs ze statusem pending dla niewykonanych wierszy. Patrzy na nią równocześnie pięciu workerów: każdy chce złapać najstarsze zadanie i oznaczyć je jako „w trakcie". Zwykła blokada na poziomie wiersza z limitem sprawia, że wszyscy pięciu workerów zbiega się na tym samym wierszu i działa szeregowo. Lekarstwem jest pomijanie wierszy już zablokowanych i branie kolejnego wolnego: każdy worker dostaje własne zadanie, a równoległość działa bez kolizji. jobs(id SERIAL, status, payload) zawiera cztery wiersze pending (a, b, c, d). Pobierz z jobs jedno zadanie pending o najmniejszym identyfikatorze, przełącz je na running — pozostałe trzy zostają w pending.

Wynik Twojego zapytania pojawi się tutaj