Transazione per accesso concorrente a una tabella

luke1979

Nuovo Utente
24 Apr 2015
3
0
0
Ciao a tutti, ho un problema che non riesco a risolvere. Ho letto sul manuale di mysql ma non ne vengo a capo:

il problema è questo,
i clienti possono inviare delle richieste di prenotazione alle attività commerciali,
l'attività commerciale periodicamente verifica se ci sono delle nuove richieste di prenotazione e se le trova per ognuna di esse dovrà accettare o rifiutare la prenotazione.

Ho una tabella prenotazioni con i seguenti campi:
id (chiave primaria della tabella)
idCliente
idAttivita
stato (accettata, rifiutata o null)
sospesa (true o false)
testo (testo che il cliente scrive quando fa una prenotazione)

Ipotizzando di avere più postazioni all'interno dell'attività che contemporaneamente visualizzano le nuove richieste di prenotazione e decidono se accettarle, rifiutarle o non fare nulla, vorrei che se una richiesta è già visualizzata sul display di un addetto non venga visualizzata anche su quello di un altro.
Ho pensato di usare una trasazione tipo questa nella classe java che fa il check se ci sono nuove richieste:

1) inizio transazione
2) leggo dalla tabella prenotazioni quelle dove idAttività è quello dell'attività interessata e dove sospesa = false e dove stato = null
3) faccio un update per rendere sospesa = true sugli stessi record della select sopra al punto 2
4) fine transazione

quando la classe rifà la verifica per un altro addetto dell'attività selezionerà solo quelle dove sospesa = false come dal punto 2 e quindi non rivisualizza quelle che sono visualizzate su un altro schermo di un altro addetto. Quando l'addetto accetta o rifiuta o non fa nulla riguardo ad una prenotazione e passa alla successiva visualizzata sul suo display il campo sospesa viene posto = false così che un altro addetto alla prossima verifica periodica può vedere la richiesta nel caso in cui non sia ancora stata accettata o rifiutata.

Mi domando? Il punto 2 può essere eseguito in contemporanea prima che avvenga il punto 3 dell'update da più addetti qudini più addetti visualizzeranno le stesse richieste, allora ho pensato che potrei usare nel punto 2 una SELECT ... LOCK IN SHARE MODE oppure una SELECT .. FOR UPDATE, ma non riesco bene a capire dal manuale come funzionano.
La lock in share mode aspetta che sia finita ogni altra operazione in altre transazioni sui record della select prima di eseguirla... ma mi domando se due select lock in share mode vengono eseguite insieme prima che parta un'update del punto 3 anch'esse leggeranno le stesse richieste e non va bene.
La select for update invece forse potrebbe andare bene perchè oltre a mettere un blocco di scrittura da parte delle altre richieste sui record ne impedisce anche la scrittura? Alcuni manuali dicono così, altri il contrario quidni non lo riesco a capire.

Altrimenti potrei evitare di usare le transazioni e far visualizzare anche le stesse richieste e quando un addetto prende una decisione di accettare o rifiutare, se lo stato è già diverso da null non prendo in considerazione la sua decisione perchè la richiesta è già stata evasa da un altro addetto. Però questa soluzione porterebbe ad una gran perdita di tempo per tutti gli addetti che ogni qualvolta devono accettare o rifiutare la prenotazione devono andare a controllare la disponibilità nella lista degli appuntamenti ed è appunto tempo sprecato che se un addetto ha già evaso una richiesta anche tutti gli altri che magari sono centinaia di addetti debbano andare inutilmente a controllare la lista appuntamenti per prendere una decisione che poi non srevirà a nulla perchè la richiesta è già stata evasa.

Ringrazio tantissimo chi mi può aiutare perchè non riesco ad uscirne...
 
Discussioni simili
Autore Titolo Forum Risposte Data
G Transazione immagini Javascript 1
felino Lubuntu 18.04 Requisiti per applicazione console .net core 7.0 Linux e Software 0
M pulsante per aprire una maschera che contiene controllo schede MS Access 0
E Aiuto per query PHP 8
E Il punto di riferimento italiano per Trailers cavalli Discussioni Varie 0
F CERCO Servizi SEO di Qualità per Agenzie di Servizi SEO e Posizionamento 3
D Miglior modo per estrarre le occorrenze di un elemento in un set di più file xml e quindi scrivere il risultato in una tabella Excel o magari in JSON XML 0
A Cerco programmatore/sviluppatore per creare forum Offerte e Richieste di Lavoro e/o Collaborazione 2
R Plugin di base per WordPress WordPress 0
D [COMPRO/CERCO] GUEST POST o scambio link per sito di Spiritualità ed Esoterismo. Vendere e Acquistare pubblicita' online 0
L Suggerimento Pagespeed per non vedenti HTML e CSS 0
M Analisi sito per pulire codice inutile HTML e CSS 1
Paolo69 Risolto reCAPTCHA v2 per ASP Classic ASP 0
M Hosting VPS per server di gioco Minecraft Hosting 0
N Grazie per il benvenuto Presentati al Forum 0
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
R Filtri e plugin per photoshop Photoshop 0
AkTaRuS DIsabilitare il tasto destro tranne che per code e pre Javascript 1
0 [Retribuito] Cercasi programmatore per GdR PbC Offerte e Richieste di Lavoro e/o Collaborazione 0
A Adempimenti per magazine on line Leggi, Normative e Fisco 0
R Recupero di permalink di un sito che è stato eliminato per errore WordPress 5
I aiuto urgente per thunderbird Posta Elettronica 0
A Web master per semplice sito web Offerte e Richieste di Lavoro e/o Collaborazione 2
M [Cerco][Gratuito] Artista/designer per creazione grafica gioco di società Offerte e Richieste di Lavoro e/o Collaborazione 0
M Un saluto per cominciare Presentati al Forum 1
N MAX() + ADD_DATE - per update su Mysql MySQL 0
G Qualcuno conosce questo software per gestire le telecamere IP Cam e Videosorveglianza 0
A [CERCO] Articolista per siti a tema eventi e feste private Offerte e Richieste di Lavoro e/o Collaborazione 0
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
I aiuto per outlook Posta Elettronica 0
L Script per convertire numeri in parole Javascript 2
J [Cerco] [Collaborazione gratuita] Grafico per piccoli lavori di grafica Offerte e Richieste di Lavoro e/o Collaborazione 0
M Memorizzazione temi per le diverse pagine del sito Javascript 1
otto9due Proteggere file caricati dall'esterno ma renderli accessibili per gli utenti loggati. PHP 4
E Consigli per hosting reseller Hosting 0
T aiuto per trasformare un quiz fatto in JS in un quiz in JQUERY jQuery 0
F Cerco fotografo per sito abiti da sposa Discussioni Varie 2
R [cerco][retribuito] Collaborazione per creazioni loghi ed altro Offerte e Richieste di Lavoro e/o Collaborazione 0
M Unire 2 funzioni per l'invio di un form e con l'apertura di un div Javascript 0
seranto Blocco preventivo e Registro dei Consensi per Cookie tecnici? Leggi, Normative e Fisco 2
D Come estendere la tariffa per Wordpress con Visa? Hosting 1
M Fullcalendar in Codeigniter, un aiuto per la chiamata $ajax ? jQuery 0
N Consigli SEO per il mio sito di web design SEO e Posizionamento 0
P Proiezione di Gauss per grafica su sfera in PVC Photoshop 0
M Sintassi "personalizzata" per mysql workbench? MySQL 0
MarcoGrazia Categorie per settore merceologico di Google SEO e Posizionamento 0
Z PHP.INI - STMP per invio email con PHP Server Dedicati e VPS 0
matteoraggi Local seo per un B&B di Forli SEO e Posizionamento 3
D Ical: Sto realizzando un gestionale per i miei appartamenti di casa vacanza PHP 0
S Teams software per i meeting Windows e Software 0

Discussioni simili