Unrepeatable read

errore nella gestione della concorrenza tra transazioni

In informatica, con il termine unrepeateble read, o inconsistent analysis, si intende un errore nella gestione della concorrenza tra transazioni dovuta ad una dipendenza read -> write.

L'unrepeateble read è un'analisi incoerente di dati di un database da parte di una transazione causata da aggiornamenti prodotti da un'altra.

Definizione

modifica

Si è in presenza di unrepeateble read quando una transazione Ta legge un dato X con versione 0, denotato come X(0), e Tb ne produce una nuova versione X(1) la quale viene letta o scritta da Ta dopo il commit di Tb.

Esempio

modifica

Supponiamo che due transazioni Ta e Tb operino su record relativi a quantità di un materiale in magazzino. Ta somma le quantità presenti nel contenitore C1, C2 e C3. Tb vuole trasferire 1 pezzo di materiale dal contenitore C3 al contenitore C1. Ecco la situazione iniziale dei tre contenitori:

C1 C2 C3
Quantità presente 4 5 3

Esempio di esecuzione con Unrepeatable Read (con Sum viene indicato la somma effettuata da Ta):

Tempo Transazione Ta Transazione Tb
t(0) read[C1] (Sum = 4)
t(1) read[C2] (Sum = 9)
t(2) read[C3]
t(3) write[C3] (C3 = 2)
t(4) read[C1]
t(5) write[C1] (C1 = 5)
t(6) commit
t(7) read[C3] (Sum = 11)

Ta opera un'analisi incoerente dei dati e fornisce un risultato errato (11 invece che 12).

Bibliografia

modifica
  • Paolo Ciaccia, Dario Mario, Lezioni di basi di dati, 2013, Editrice Esculapio, ISBN 978-8874887187

Voci correlate

modifica