Pesimistic lock ne treba da koristis ni za sta sem u krajnjoj apsolutnoj nuzdi, a kamoli da drzis X lock na sat i nesto vremena (niti bi to dozvolio DB bez nekog zesceg hacka). Pribegavanje pesimistic lockovima za svaku glupost je znak lose arhitekture i loseg dizajna aplikacije
Ne postoji "fabricko" lock resenje za tvoj problem, uvek moze da ti se desi da se dva korisnika sudare u rezervisanju resursa isto kao sto mogu da se sudare i u update komandi. Ljudi to cesto zaborave i misle da lock rezervacijom u dugackim transakcijama resavaju problem (a sta je sa sledecim procesom koji ostaje blokiran dok se lock ne oslobodi?). Ono sto tebi treba je sistem rezervacije sa ili serijalizijom operacija ili sa optiimstic lockom.
1. Serijalizacija, napravis neki unattended servis koji barata objektima, njihovim rezervacijama i TTLovima. Svaki zahtev koji servis primi lokalno queue-jes i redom rezervises objekte klijentima. Queue ti je jedan od mehanizama serijalizacije, u principu mozes i neki drugi da koristis. Prosto postavi sebi pitanje sta se desava ako u apsolutno isto vreme dva razlicita klijenta izdaju identican zahtev. AKo znas sta se desva onda znas dal si resio konkurentnost.
2. Optimisitick lock rezervazija. Dodaj jos dva polja u tabelu objekta, clientID i TTL. Rezervaciju vrsis sa:
update objekat set clientid=mojID, TTL=vremeisticanja WHERE ID=objectid
AND ClientID IS NULL
ovo bold je vazno. Ako se dva klijenta sudare svaki SQL ce ih serijalizovati po defaultu jer ce se sudariti na update row-locku, prvi ce proci i imati 1 row updated, drugi ce potom vratiti 0 rows updated (jer clientID vise nije null) i problem rezervacije je resen a nigde nije bilo X lockova i update lock je trajao najminimalnije moguce. Posle napravis neki server job koji ce periodicno (recimo svakih 60 sekundi) da uradi update clientid i TTL na null ako je istekao TTL (za one koji su ispali) a kad klijent regularno zavrsi rad moze sam da postavi svoju rezervaciju na null i gotovo.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić