ProprietàACID

ACID è un concetto (e un acronimo) che si riferisce alle quattro proprietà di una transazione in un sistema di database, che sono: Atomicità, Consistenza, Isolamento e Durabilità. Queste proprietà assicurano l’accuratezza e l’integrità dei dati nel database, garantendo che i dati non si corrompano a causa di qualche errore, garantendo la validità dei dati anche quando si verificano errori o guasti.

Le proprietà ACID ci permettono di scrivere applicazioni senza considerare la complessità dell’ambiente in cui l’applicazione viene eseguita. Questo è essenziale per elaborare le transazioni nei database. Grazie alle proprietà ACID, possiamo concentrarci sulla logica dell’applicazione invece che sui fallimenti, sul recupero e sulla sincronizzazione dei dati.

Transazione

Prima di spiegare le quattro proprietà ACID, dobbiamo capire cos’è una transazione. Una transazione è una sequenza di operazioni che vengono eseguite come una singola unità di lavoro, e una transazione può consistere di uno o molti passi. Una transazione accede ai dati usando operazioni di lettura e scrittura.

Ogni transazione è un gruppo di operazioni che agisce come una singola unità, produce risultati coerenti, agisce in isolamento da altre operazioni e gli aggiornamenti che effettua sono memorizzati in modo durevole.

L’obiettivo di una transazione è quello di preservare l’integrità e la coerenza dei dati. Se una transazione ha successo, i dati che sono stati modificati durante la transazione saranno salvati nel database. Se si verifica qualche errore e deve essere cancellato o ripristinato, le modifiche apportate ai dati non saranno applicate.

Quando lavoriamo con un database, eseguiamo dichiarazioni SQL, e queste operazioni sono generalmente eseguite in blocchi, e questi blocchi sono le transazioni. Permettono di inserire, aggiornare, cancellare, cercare dati, e così via.

Per esempio, trasferire denaro tra conti bancari è una transazione, ciò che accadrà in questo caso è che il valore deve essere addebitato su un conto e accreditato su un altro conto.

Atomicità

Una transazione deve essere un’unità di lavoro atomica, il che significa che tutti i dati modificati sono eseguiti o nessuno di essi lo sarà. La transazione deve essere eseguita completamente o fallire completamente, se una parte della transazione fallisce, tutta la transazione fallirà. Questo fornisce affidabilità perché se c’è un fallimento nel mezzo di una transazione, nessuna delle modifiche in quella transazione sarà impegnata.

Per esempio, in una transazione finanziaria, il denaro esce dal conto A e va al conto B, entrambe le operazioni dovrebbero essere eseguite insieme, e se una di esse fallisce, l’altra non sarà eseguita. Quindi la transazione è trattata come una singola entità, come un singolo comando. Una transazione può avere più di due operazioni, ma saranno sempre eseguite tutte o nessuna. In questo esempio, quando i soldi vengono trasferiti dal conto A al conto B, se qualcosa fallisce, l’intera transazione verrà interrotta e farà rollback.

Consistenza

Questa proprietà assicura che la transazione mantenga i vincoli di integrità dei dati, lasciando i dati coerenti. La transazione crea un nuovo stato valido dei dati e se accade qualche fallimento, restituisce tutti i dati con lo stato prima dell’esecuzione della transazione.

L’obiettivo è di assicurare che il database prima e dopo la transazione sia coerente. Se una transazione lascia i dati in uno stato non valido, la transazione viene interrotta e viene riportato un errore.

I dati che vengono salvati nel database devono essere sempre validi (i dati saranno validi secondo le regole definite, compresi i vincoli, le cascate e i trigger che sono stati applicati al database), in questo modo si evita la corruzione del database che può essere causata da una transazione illegale. Per esempio, se cerchiamo di aggiungere un record in una tabella di vendita con il codice di un prodotto che non esiste nella tabella dei prodotti, la transazione fallirà. Un altro esempio, se si ha una colonna che non permette numeri negativi, e si cerca di aggiungere o modificare un record, utilizzando un valore inferiore a zero su questa colonna, la transazione fallirà.

Isolation

Questa proprietà assicura l’isolamento di ogni transazione, garantendo che la transazione non sarà modificata da qualsiasi altra transazione concorrente. Significa che ogni transazione in corso non sarà interferita da nessun’altra transazione fino al suo completamento.

Per esempio, se due clienti stanno cercando di comprare allo stesso tempo l’ultimo prodotto disponibile sul sito web, quando il primo utente finisce lo shopping, la transazione dell’altro utente sarà interrotta.

Durabilità

Una volta che una transazione è completata e impegnata, i suoi cambiamenti sono persistiti permanentemente nel database. Questa proprietà assicura che l’informazione salvata nel database sia immutabile fino a quando un’altra transazione di aggiornamento o cancellazione non la tocchi.

Una volta che la transazione è impegnata, rimane in questo stato anche se si verifica un problema serio, come un crash o un’interruzione di corrente. A questo scopo, le transazioni completate sono registrate su dispositivi di memoria permanente (non volatile) come i dischi rigidi, così i dati saranno sempre disponibili, anche se l’istanza del DB viene riavviata.

Conclusione

Le proprietà ACID assicurano l’integrità e la coerenza dei dati nel database, garantendo che i dati non vengano danneggiati a seguito di qualche guasto. I database che applicano le proprietà ACID assicurano che solo le transazioni che sono andate completamente a buon fine saranno processate, e se qualche fallimento accade prima che una transazione sia completata, i dati non saranno cambiati.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *