Transazione
Una transazione è un'unità logica di elaborazione che accede a un database, vista come un'operazione singola e indivisibile
DBMS Single-User vs Multi-User
- Single-User: solo un utente alla volta può utilizzare il sistema
- Multi-User: più utenti possono accedere al sistema concorrentemente, grazie alla multiprogrammazione
Multiprogrammazione e interleaving
La multiprogrammazione permette a più transazioni di essere eseguite simultaneamente, anche su sistemi con una sola CPU, attraverso l'interleaving (esecuzione alternata delle operazioni)
Su sistemi multiprocessore, l'esecuzione è realmente parallela
Operazioni sulle transazioni
- Read_item(X): legge l'item X dal database
- Write_item(X): scrive il valore di X nel database
Entrambe le operazioni coinvolgono la gestione di buffer in memoria e trasferimenti da/verso il disco
Problemi con transazioni concorrenti
- Aggiornamento perso: una transazione sovrascrive le modifiche di un'altra
- Aggiornamento temporaneo (lettura sporca): una transazione legge dati non ancora confermati da un'altra transazione che poi fallisce
- Totalizzazione scorretta: una transazione calcola aggregazioni su dati parzialmente aggiornati
- Letture non ripetibili: una transazione legge due volte lo stesso dato, ma il valore cambia tra le letture a causa di un'altra transazione
Recovery delle transazioni
Il sistema deve garantire che una transazione sia completata interamente o annullata completamente