Consiglio su come evitare overbooking

mercoledì 11 giugno 2014 - 09.45
Tag Elenco Tags  C#  |  .NET 1.0

svipla Profilo | Senior Member

Ciao a tutti
Sto realizzando un portale per la prenotazione di camere con asp.net e sql server.
Supponiamo che un utente stia prenotando l'ultima camera disponibile, come posso evitare che mentre l'utente sta completando la prenotazione un altro utente prenoti la stessa camera? E non rischiare l'overbooking.
Grazie mille

alx_81 Profilo | Guru

>Ciao a tutti
ciao

>Supponiamo che un utente stia prenotando l'ultima camera disponibile,
>come posso evitare che mentre l'utente sta completando la prenotazione
>un altro utente prenoti la stessa camera? E non rischiare l'overbooking.
Questo è un problema di concorrenza; è importante capire cosa ti aspetti nel caso in cui due persone cerchino di prenotare la stanza.
In questo preciso caso, direi che chi primo arriva meglio alloggia (e alloggerà davvero ).
Ciò significa che quando vai a prenotare la camera, devi fare in modo di "bloccare" l'accesso ai successivi processi che tentano di accedere.
Puoi ad esempio impostare un flag sul record della camera, per fare in modo che il secondo processo che va a leggere, trovi il flag "alzato" e non ottenga il record che vuole.
Ma dipende molto anche da cosa fa la tua procedura.
Dipende anche dal tempo che passa da quando leggi il record a quando lo aggiorni.
Tu come avevi idea di gestirla?


Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

svipla Profilo | Senior Member

L'ideale sarebbe bloccare la camera, ma come gestire l'abbandono improvviso della pagina da parte dell'utente o un lungo tempo di inattività dell'utente?
Pensavo di controllare un momento prima del salvataggio se la camera è ancora disponibile.
Non basta mettere un flag alla camera perchè la disponibilità varia da giorno a giorno e devo bloccare la disponibilità in tutti i giorni della prenotazione

alx_81 Profilo | Guru

>L'ideale sarebbe bloccare la camera, ma come gestire l'abbandono
>improvviso della pagina da parte dell'utente o un lungo tempo
>di inattività dell'utente?
un timeout, su quello non hai tante possibilità..

>Pensavo di controllare un momento prima del salvataggio se la camera è ancora disponibile.

>Non basta mettere un flag alla camera perchè la disponibilità
>varia da giorno a giorno e devo bloccare la disponibilità in
>tutti i giorni della prenotazione
In tal caso, siccome non è proprio concorrenza transazionale ma è dilatata nel tempo, dovrai segnare il range in cui quella camera è prenotata.
E dovrai gestire stati ben precisi. Immaginiamo un paio di situazioni reali:

1) prenoto, e va tutto a buon fine
- apro la ricerca e trovo la camera
- segno come prenotato da X a Y di quest'anno
- la stanza è segnata come provvisoriamente prenotata da X a Y (con un timeout di sessione segnato sul db ad esempio)
- chiunque la trovi nella ricerca (poichè al momento non ancora prenotata), quando cerca di prenotarla si prende un "già prenotata nel periodo")
- confermo la prenotazione e segno lo stato di prenotazione da provvisoria a effettiva
- fine

2) prenoto, e non finisco la transazione
- apro la ricerca e trovo la camera
- segno come prenotato da X a Y di quest'anno
- la stanza è segnata come provvisoriamente prenotata da X a Y (con un timeout di sessione segnato sul db ad esempio)
- chiunque la trovi nella ricerca (poichè al momento non ancora prenotata), quando cerca di prenotarla si prende un "già prenotata nel periodo")
- si chiude la pagina, cade la sessione, non termino la transazione
- chiunque trovi la camera prima del timeout scaduto, non la vede o la vede come prenotata
- chiunque trovi la camera DOPO la scadenza del timeou, la vede e può operare

per iniziare, che ne pensi?
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

svipla Profilo | Senior Member

Ottimo spunto.
Grazie mille
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5