Differenza tra Lock Table e Transazioni

di il
7 risposte

Differenza tra Lock Table e Transazioni

Salve a tutti,

Volevo chiedervi dei chiarimenti riguardo all'uso di transazioni e lock table diciamo facendo riferimento a MySQL.

Se, io ho un accesso simultaneo ai dati, usando il lock table ho una certa garanzia.

Poiche una volta acquisita la risorsa blocco la tabella , quindi la uso solo io e tutto ok.

Ora, leggevo che appunto le transazioni sono un altro modo per gestire l'accesso simultaneo ai dati.

Non capisco pero in che modo?

Perche, io apro una transazione nella quale i dati sono validi solo al momento del commit.

Ma, nel tipico esempio che, ho 10 unita di un prodotto, arrivano contemporaneamente 2 utenti, il primo chiede 3 unita il secondo 8 unita.

Con i lock ho capito la logica e il perche' tutto funziona.

Con le transazioni?

Arriva il primo utente parte la transazione, contemporaneamente arriva il secondo cliente e parte la transazione... In che modo ho garanzia che l'esecuzione resti consistente?

Grazie a tutti

7 Risposte

  • Re: Differenza tra Lock Table e Transazioni

    Sono due cose diverse, anche se connesse.

    La transazione è 'indispensabile' nel momento in cui vado ad aggiornare i dati nella tabella.

    Il lock pessimistico (quello che tu applichi con il lock della tabella) non è sempre la scelta migliore, e quindi non sempre raccomandato, soprattutto in uno scenario multi-utente.

    L'esempio che tu hai fatto è mal posto, perchè se blocchi la tabella, nessun'altro utente potrà accedere ai dati del record, quindi non potrà sapere qual'è la disponibilità reale del prodotto.

    Tieni presente che il lock pessimistico è vivamente sconsigliato per il semplice fatto che c'è il rischio reale che la tabella venga bloccata inutilmente, e a tempo indeterminabile (l'utente va al bagno, lo chiama il capo, riceve una telefonata urgente, e così via...).
    Bloccare il record, in questi casi, rischia di creare blocco del sistema, aggiungendo il fatto che poi non si sa ancora cosa modifica l'utente (ammesso che modifichi davvero qualcosa).

    Pensiamo, ad esempio, ad una banale registrazione via WEB di uno o più posti in un volo aereo da parte di più utenti.
    In primis, in uno scenario come questo non è possibile bloccare la tabella, ma è chiaro che si deve prevedere un meccanismo di controllo sulla disponibilità effettiva al momento della registrazione da parte dell'utente, azione che spesso include più passaggi.

    Ecco che allora diventa indispensabile racchiuderequesti passaggi all'interno di una transazione grazie alla quale se qualcosa va storto (disponibilità insufficiente, carta di credito sbagliata, ecc.) è possibile annullare tutto.

    In generale si usa il lock ottimistico, tramite l'aiuto di un campo TimeStamp:
    si confronta il TimeStamp che hai in canna, con quello che è sulla tabella :
    1 - se i due TimeStamp coincidono, allora si apre la transazione e si aggiornano i dati.

    2 - se i due TimeStamp NON coincidono, non devi aggiornare perchè significa che un'altro utente ha modificato i dati, ed è quindi necessario ricaricarli dalla tabella e poi potrai procedere di nuovo alla modifica degli stessi.
  • Re: Differenza tra Lock Table e Transazioni

    Ciao,

    Inanzitutto grazie per la risposta e scusami se rispondo solo ora.

    Il tuo esempio di prenotazione di biglietti aerei mi interessa molto.

    Con le transazioni non mi e' chiaro come poter gestire casi come quelli, puoi spiegarmi come fare?

    So che hai gia citato una soluzione con il timestamp ma non mi e' molto chiara

    Grazie
  • Re: Differenza tra Lock Table e Transazioni

    Up
  • Re: Differenza tra Lock Table e Transazioni

    Ciao,
    se l utente1 apre una transazione sulla tabella t1 l utente2 quando prova ad aprire la transazione su t1 resta in attesa finche utente1 nn chiude la transazione...
    il rischio xò è che se i tempi sono lunghi potresti avere dei deadlock(in sql server mi capitava).
    spero di averti aiutato..
  • Re: Differenza tra Lock Table e Transazioni

    elle0087 ha scritto:


    ciao,
    se l utente1 apre una transazione sulla tabella t1 l utente2 quando prova ad aprire la transazione su t1 resta in attesa finche utente1 nn chiude la transazione...
    il rischio xò è che se i tempi sono lunghi potresti avere dei deadlock(in sql server mi capitava).
    spero di averti aiutato..
    ciao,
    quindi in sostanza dalla tua risposta dovrei dedurre che non vi e' alcuna differenza tra transazioni e lock?

    grazie
  • Re: Differenza tra Lock Table e Transazioni

    Ciao,
    io la lock sulle tabelle nn l ho mai usata, ma cmq la transazione è generica per qualsiasi query e più complessa.
    se apri una transazione, poi il sistema in automatico blocca le eventuali tabelle in uso e se effettui la rollback ripristina la situazione prima della transazione.
  • Re: Differenza tra Lock Table e Transazioni

    Ok, thanks
Devi accedere o registrarti per scrivere nel forum
7 risposte