Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Consiglio su come evitare overbooking
mercoledì 11 giugno 2014 - 09.45
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
C#
|
.NET 1.0
svipla
Profilo
| Senior Member
361
messaggi | Data Invio:
mer 11 giu 2014 - 09:45
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
8.814
messaggi | Data Invio:
mer 11 giu 2014 - 16:51
>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
361
messaggi | Data Invio:
mer 11 giu 2014 - 18:44
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
8.814
messaggi | Data Invio:
gio 12 giu 2014 - 09:20
>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
361
messaggi | Data Invio:
gio 12 giu 2014 - 09:32
Ottimo spunto.
Grazie mille
Torna su
Stanze Forum
Elenco Threads
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 !