#826

Tee tööde järjekord, mis paralleliseerub kollisioonideta

Andmebaasis on tööde järjekord — tabel jobs staatusega pending täitmata ridade jaoks. Sellele vaatab korraga viis töötajat: igaüks tahab haarata vanima töö ja märkida selle «töös» olevaks. Tavaline reataseme lukk koos limiidiga paneb kõik viis töötajat sama rea peale kuhjuma ja järjestikku seisma. Ravim on jätta juba lukustatud read vahele ja võtta järgmine vaba: iga töötaja saab oma töö ja paralleelsus töötab ilma kollisioonideta. Tabelis jobs(id SERIAL, status, payload) on neli rida staatuses pending (a, b, c, d). Võta tabelist jobs üks pending-töö väikseima identifikaatoriga ja vii see staatusesse running — ülejäänud kolm jäävad staatusesse pending.

Sinu päringu tulemus ilmub siia