#826

Construiește o coadă de joburi care se scalează curat

Există o coadă de joburi în baza de date — tabela jobs cu statusul pending pentru rândurile neexecutate. Cinci lucrători se uită la ea concurent: fiecare vrea să apuce cel mai vechi job și să-l marcheze drept „în lucru". Un lock obișnuit la nivel de rând cu o limită face ca toți cei cinci lucrători să se îngrămădească pe același rând și să se serializeze. Remediul este să sari peste rândurile deja blocate și să-l iei pe următorul liber: fiecare lucrător își primește propriul job, iar paralelismul funcționează fără coliziuni. jobs(id SERIAL, status, payload) conține patru rânduri pending (a, b, c, d). Apucă un job pending din jobs cu cel mai mic id, comută-l la running — celelalte trei rămân pending.

Rezultatul interogării tale va apărea aici