Locking ottimistico o pessimistico: quale usare per prenotazioni o checkout?
Share

In this article
Usa il locking pessimistico quando molti utenti competono per la stessa riga, come gli ultimi biglietti di un evento. Usa il locking ottimistico, con un campo versione, quando la contesa è rara, come prenotazioni o carrelli distribuiti su molte slot e prodotti. Scegli in base a quanto spesso due scrittori colpiscono realisticamente la stessa riga.
Qual è la differenza tra locking ottimistico e pessimistico?
Il locking pessimistico blocca gli altri scrittori mentre una transazione detiene una riga, quindi i conflitti attendono. Il locking ottimistico lascia procedere tutti, poi rifiuta una scrittura se un campo versione è cambiato nel frattempo, quindi i conflitti vengono ritentati. Il primo scambia latenza per certezza; il secondo scambia ritentativi occasionali per nessuna attesa.
Quando il locking ottimistico è la scelta migliore?
Il locking ottimistico è preferibile quando le scritture sono brevi e le collisioni rare. Nei slot di prenotazione di Trexind un campo versione significa che la scrittura che perde una gara riceve un conflitto, non una sovrascrittura silenziosa, e ritenta contro lo stato attuale dello slot. Tenere un lock per tutta la richiesta costerebbe più di quanto risparmi.
Quando il locking pessimistico è la scelta migliore?
Il locking pessimistico è preferibile su una singola riga calda che molti acquirenti vogliono nello stesso momento, come gli ultimi biglietti di un evento popolare. Qui, i ritentativi ottimistici causano caos e costringono ogni perdente a rifare tutto il checkout. Un lock breve fa attendere il secondo acquirente pochi millisecondi, che poi vede il sold out.
Come decidere per il proprio sistema?
Chiediti quanto spesso due scrittori colpiscono la stessa riga e quanto costa all'utente una gara persa. Collisioni rare e ritentativi economici indicano ottimistico. Collisioni frequenti su una riga o ritentativi che rifanno lavori costosi indicano pessimistico. Misura la contesa prima di decidere; la stessa app può usare entrambi.
Molte righe, poche collisioni per riga: ottimistico (stock su centinaia di SKU)
Una riga, molti scrittori simultanei: pessimistico (ultimi biglietti di un evento)
Scrittura una volta per entità: un lock breve va bene (invio esame)
A colpo d'occhio
Ultimi biglietti di un evento (FindYourVibe) · Alto: picco su una riga · Lock pessimistico sulla riga · Il perdente attende millisecondi invece di ritentare tutto il checkout
Slot appuntamenti e tavoli (Trexind) · Basso: scritture brevi, raramente contestate · Campo versione ottimistico · Un lock per tutta la richiesta non vale la latenza
Stock su molti SKU (Skyxis) · Basso: carrelli raramente colpiscono la stessa riga · Campo versione ottimistico · Un lock per la finestra di checkout costa più del raro ritentativo
Invio tentativo esame (PS Classes) · Una volta per tentativo · Lock Redis sull'ID tentativo · L'invio avviene una volta, quindi pochi millisecondi di lock costano meno di una classifica corrotta
Originariamente pubblicato su sakshamjain.codes/blog/optimistic-vs-pessimistic-locking. Serve questo sviluppo? Vedi i miei servizi su NexoRush o contattami.