Concorrenza (Was: Overbooking)

Lorenzo propone un interessante e frequente problema di gestione "atomica" di verifica e prenotazione di un posto.
Ignorando per un momento le pur necessarie distinzioni fra prenotazione di posti numerati e non, una soluzione tecnologica esiste (in questo non concordo in pieno col commento di Alessandro), e rappresenta una sorta di pattern per questa situazione. Il pattern in particolare è ideale per le applicazioni di commercio elettronico in cui la conferma della vendita deve essere data on-line (quindi con conferma della disponibilità di magazzino).

La soluzione consiste appunto nel rendere atomica l'operazione di verifica e prenotazione, trasformando l'operazione di ricerca in un "update temporaneo". Alla domanda dell'operatore del cinema "Quanti posti le servono?" l'utente risponde con un numero, che l'operatore usa come input alla ricerca. A questo punto il sistema non "cerca" (SELECT) i posti, ma li "prenota" (UPDATE) direttamente, diciamo a nome di quell'operatore (e non dell'utente). Nel caso il cui la "ricerca/prenotazione" fallisse, cioè aggiornasse un numero di record inferiore a quello richiesto, si fa il rollback ed è necessario ripetere. Nel caso invece in cui l'utente procedesse al "checkout" i posti vengono a lui assegnati definitivamente.

La subottimalità introdotta da questo meccanismo è che si rendono temporaneamente indisponibili quei posti per cui l'operatrice ha fatto una verifica, positiva, ma che poi l'utente al telefono decide di non prendere. Vale più o meno lo stesso con il carrello di un utente anonimo in una applicazione di commercio elettronico.

Ovviamente questa è una delle strade possibili. Sono curioso di seguire il seguito della discussione.

Un'ultima nota: il termine overbooking è in realtà improprio in questo contesto, ma credo che il contenuto del post di Lorenzo chiarisca di cosa si sta parlando

powered by IMHO

Print | posted on Thursday, January 27, 2005 12:59 PM

Feedback

# re: Concorrenza (Was: Overbooking)

left by Lorenzo Melato at 1/27/2005 5:14 PM Gravatar
Il fatto è che anche se effettivamente l'Update fatto così venisse messo in coda e fosse intrinsecamente atomico (ho qualche dubbio in proposito), nello specifico dominio del problema descritto bisognerebbe utilizzare per forza una transazione, altrimenti potrebbe succedere che, ad esempio, solo 2 delle tre poltrone non siano occupate. In tal caso l'update fatta così imposterebbe comunque 2 poltrone occupate invece di 3.

utilizzando una transazione o si occupano tutti e tre i posti o nessuno.

# Gestire il problema dell'overbooking

left by Pingback/TrackBack at 1/27/2005 6:10 PM Gravatar
Gestire il problema dell'overbooking
Comments have been closed on this topic.