Blocarea optimistă sau pesimistă: care ar trebui folosită pentru o rezervare sau finalizarea comenzii?
Share

In this article
Folosiți blocarea pesimistă când mulți utilizatori concurează pentru același rând, cum ar fi ultimele bilete la un eveniment. Folosiți blocarea optimistă, cu un câmp de versiune, când conflictele sunt rare, cum ar fi rezervările sau coșurile răspândite pe mai multe sloturi și produse. Alegeți în funcție de cât de des doi scriitori ating realist același rând.
Care este diferența dintre blocarea optimistă și cea pesimistă?
Blocarea pesimistă blochează alți scriitori în timp ce o tranzacție deține un rând, astfel conflictele așteaptă. Blocarea optimistă permite tuturor să continue, apoi respinge o scriere dacă un câmp de versiune s-a schimbat între timp, astfel conflictele se reiau. Prima schimbă latența pentru certitudine; a doua schimbă reîncercările ocazionale pentru lipsa așteptării.
Când este blocarea optimistă o alegere mai bună?
Blocarea optimistă este avantajoasă când scrierile sunt scurte și coliziunile rare. La sloturile de rezervare Trexind, un câmp de versiune înseamnă că scrierea care pierde cursa primește un conflict, nu o suprascriere silențioasă, și reia operațiunea pe starea curentă a slotului. Menținerea unui blocaj pe întreaga cerere ar costa mai mult decât ar economisi.
Când este blocarea pesimistă o alegere mai bună?
Blocarea pesimistă este ideală pentru un singur rând fierbinte pe care mulți cumpărători îl doresc simultan, cum ar fi ultimele bilete la un eveniment popular. Acolo, reîncercările optimiste provoacă agitație și forțează fiecare pierzător să refacă întregul proces de finalizare a comenzii. Un blocaj scurt permite celui de-al doilea cumpărător să aștepte câteva milisecunde și apoi să vadă că biletele s-au epuizat.
Cum decideți pentru propriul sistem?
Întrebați-vă cât de des doi scriitori ating același rând și ce cost are pentru utilizator o cursă pierdută. Coliziunile rare și reîncercările ieftine indică blocarea optimistă. Coliziunile frecvente pe un rând sau reîncercările care refac lucrări costisitoare indică blocarea pesimistă. Măsurați conținutul înainte de a vă angaja; aceeași aplicație poate folosi ambele metode.
Multe rânduri, puține coliziuni pe rând: optimistă (stoc pe sute de SKU-uri)
Un rând, mulți scriitori simultani: pesimistă (ultimele bilete la un eveniment)
Scrierea se întâmplă o singură dată per entitate: un blocaj scurt este acceptabil (trimiterea unui examen)
Pe scurt
Ultimele bilete la un eveniment (FindYourVibe) · Ridicat: un val pe un singur rând · Blocare pesimistă pe rând · Pierzătorul așteaptă câteva milisecunde în loc să reia toată finalizarea comenzii
Sloturi pentru programări și mese (Trexind) · Scăzut: scrieri scurte, rareori contestate · Câmp de versiune optimist · Un blocaj pe întreaga cerere nu merită latența
Stoc pe multe SKU-uri (Skyxis) · Scăzut: coșurile rar ating același rând · Câmp de versiune optimist · Un blocaj pentru fereastra de finalizare costă mai mult decât reîncercarea rară
Trimiterea unui examen (PS Classes) · O singură dată per încercare · Blocare Redis pe ID-ul încercării · O trimitere se face o singură dată, deci câteva milisecunde de blocaj sunt mai ieftine decât un clasament corupt
Publicat inițial la sakshamjain.codes/blog/optimistic-vs-pessimistic-locking. Aveți nevoie de așa ceva? Vedeți serviciile mele pe NexoRush sau contactați-mă.