Unrepeatable read
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
modificaSi è 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
modificaSupponiamo 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