Lost update
In informatica, con il termine lost update si intende un errore nella gestione della concorrenza tra transazioni dovuta ad una dipendenza write -> write.
In altre parole il lost update è una perdita di modifiche da parte di una transazione causato da un aggiornamento operato da un'altra transazione.
Definizione
modificaSi è in presenza di lost update quando una transazione Ta legge un dato X con versione 0, denotato come X(0), ne produce una nuova versione X(1), e un'altra transazione Tb legge la vecchia versione X(0) e produce X(2).
Esempi
modificaEsempio 1
modificaIn tabella viene mostrato un esempio di lost update:
Tempo | Transazione Ta | Transazione Tb |
---|---|---|
t(0) | read[X(0)] | |
t(1) | read[X(0)] | |
t(2) | write[X(1)] | |
t(3) | write[X(2)] |
Come possiamo vedere la transazione Ta effettua una lettura del dato X(0) al tempo t(0). Nel tempo t(1) la transazione Tb legge il dato X(0). In seguito, al tempo t(2) la transazone Ta modifica il dato X(0) attribuendogli il nuovo valore X(1). Infine nel tempo t(3) la transazione Tb attribuisce un ulteriore nuovo valore X(2) ottenuto prendendo in input il valore X(0) al tempo t(1). In questo esempio c'è una perdita dell'aggiornamento (lost update) di Ta.
Esempio 2
modificaNella tabella successiva viene mostrato un lost update in caso di rollback:
Tempo | Transazione Ta | Transazione Tb |
---|---|---|
t(0) | read[X(0)] | |
t(1) | read[X(0)] | |
t(2) | write[X(1)] | |
t(3) | write[X(2)] | |
t(4) | rollback |
In questo caso la modifica operata da Ta al tempo t(2) viene persa a causa del rollback di Tb al tempo t(4) che ripristina il valore X(0) valido al tempo t(1).
Bibliografia
modifica- Paolo Ciaccia, Dario Mario, Lezioni di basi di dati, 2013, Editrice Esculapio, ISBN 978-8874887187