Che cos'è una transazione?
Una transazione è un gruppo di operazioni che hanno le proprietà seguenti: atomica, coerente, isolata e durevole (ACID). Il supporto delle transazioni consente di sviluppare nuovi tipi di applicazioni, semplificando al tempo stesso il processo di sviluppo e rendendo l'applicazione più affidabile. Nella parte restante di questo argomento vengono forniti scenari che illustrano la necessità di queste proprietà, quindi una tabella che definisce ogni proprietà.
In un gruppo atomico di operazioni, ogni operazione nel gruppo deve avere esito positivo o gli effetti di tutti devono essere annullati (noto anche come rollback). Ad esempio, un bonifico bancario deve essere un set atomico di due operazioni: un addebito da un conto e un credito a un altro conto. Il debito e il credito devono essere implementati come gruppo atomico. Se queste due operazioni non riescono entrambe, il trasferimento è ingiustamente a favore della banca o del titolare del conto.
Il requisito di coerenza significa che i dati sono coerenti dopo la transazione (presupponendo che sia stato avviato con un sistema coerente prima della transazione). Per l'esempio di bonifico bancario, la coerenza può essere definita come la presenza del saldo bancario combinato dei due conti è una costante. Per implementare la coerenza nell'esempio di bonifico bancario, le operazioni di debito e di credito devono essere semplicemente per la stessa quantità di denaro.
Un altro esempio di transazione è un aggiornamento a un sito Web. Un sito di commercio elettronico richiede che venga visualizzata una nuova pagina di spostamento delle categorie di prodotti esattamente allo stesso tempo delle pagine dei dettagli del prodotto che descrivono i nuovi prodotti. In questo caso, è necessario aggiornare e aggiungere più voci di directory sotto il controllo di una transazione. Non solo è necessario avere gli aggiornamenti atomici, ma è anche necessario che un cliente che sta attualmente effettuando acquisti non visualizzi gli aggiornamenti in corso. Questo è un esempio della proprietà di isolamento delle transazioni.
La proprietà della durabilità richiede che al termine di un aggiornamento gli effetti vengano mantenuti anche se il sistema smette di rispondere. Nell'esempio precedente, la durabilità può essere fornita semplicemente garantendo un ripristino dei dati adeguato in modo che tutte le nuove voci del file system che rappresentano l'aggiunta di un nuovo prodotto al sito vengano visualizzate dopo che un sistema smette di rispondere. Questo richiede un sistema con meccanismi di backup, ripristino e disponibilità elevata dei dati.
La garanzia dell'atomicità di una transazione, nonché delle altre proprietà, è presente in presenza di un numero qualsiasi di errori, inclusi gli errori che si verificano durante la fase di ripristino di un errore precedente. Alla fine il sistema raggiungerà uno dei due stati: tutte le operazioni sono state applicate o nessuna delle operazioni è stata applicata.
Le proprietà di una transazione sono riepilogate nella tabella seguente.
Termine | Descrizione |
---|---|
Atomica |
Tutte le operazioni nella transazione hanno esito positivo o nessuna delle operazioni viene mantenuta. |
Coerente |
Se i dati sono coerenti prima dell'inizio della transazione, saranno coerenti al termine della transazione. |
Isolato |
Gli effetti di una transazione in corso sono nascosti a tutte le altre transazioni. |
Durevole |
Al termine di una transazione, i risultati sono persistenti e sopravviveranno a un arresto anomalo del sistema. |
Queste proprietà assicurano che il software possa gestire errori imprevisti, perché può semplicemente interrompere una transazione quando una situazione imprevista impedisce il completamento corretto. L'infrastruttura delle transazioni garantisce che venga eseguito il rollback di tutti gli effetti della transazione interrotta, restituendo i dati a uno stato coerente. Pertanto, un sistema transazionale consente un ripristino normale da errori di sistema.
Per garantire le proprietà ACID, un sistema che supporta le transazioni deve avere una solida funzionalità di registrazione che può essere usata per eseguire il commit o il rollback delle transazioni in base alle esigenze. Per altre informazioni, vedere Common Log File System.