ACID è l'acronimo delle quattro proprietà principali di un database: atomicità, coerenza, isolamento e durata. È spesso associato a database relazionali, ma anche un database NoSQL (non relazionale) può seguire le regole ACID. Le transazioni ACID sono comuni in molti dei motori di database più diffusi sul mercato e garantiscono che le azioni di lettura e scrittura non interferiscano con l'integrità dei dati.
Che cos'è l'ACID del database?
Un database che segue le best practices ACID ha le seguenti caratteristiche:
- Atomicità: Previeni la perdita di dati, i record orfani e le transazioni parziali con l'atmosfera. Un database con atomicità fornisce transazioni "tutte o nulla" in modo da non perdere i dati se una parte di una transazione non funziona nel midstream.
- Coerenza: I vincoli delle tabelle nei database ACID richiedono che tutte le transazioni memorizzino i dati in un formato coerente.
- Isolamento: Un database ACID assicura che le transazioni non restituiscano letture o scritture sporche isolando i dati ed eseguendo transazioni una alla volta.
- Durabilità: Un guasto del sistema (ad esempio un'interruzione dell'alimentazione elettrica) può interferire con le transazioni, pertanto un database ACID garantisce che il failover impedisca la perdita di dati dovuta a un evento critico.
Atomicità
Le moderne transazioni di database hanno più di un passaggio per finalizzare un record. Ad esempio, un cliente può creare un ordine, quindi una procedura memorizzata utilizza un'istruzione INSERT per aggiungere un record alle tabelle degli ordini e di products_ordered. Se l'aggiunta di un record alla tabella degli ordini non riesce, non è necessario aggiungerlo alla tabella products_ordered. In questo modo si crea un record orfano.
Con l'atomicità, il database ripristina tutte le transazioni quando una si guasta, in modo che i dati rimangano coerenti ed evitino danni. Solo quando tutti i passaggi di una transazione sono stati completati correttamente, i dati vengono memorizzati. L'atomicità evita il danneggiamento dei dati, la perdita di dati e i record orfani.
Coerenza
I database relazionali hanno vincoli che consentono di memorizzare solo tipi specifici di dati. I database NoSQL memorizzano i dati con il proprio formato di set. Ad esempio, se si specifica che è possibile memorizzare solo un numero decimale in una colonna totale dell'ordine, il tentativo di memorizzare una stringa causerà un errore. La coerenza dei dati fornisce agli sviluppatori un valore noto quando lavorano con un dataset.
La coerenza in un database significa che i dati possono essere previsti, il che significa che se si estrae dati per un determinato record si otterrà un risultato previsto. Utilizzando l'esempio di tabella degli ordini, si può ricevere un valore decimale per qualsiasi query che recupera un valore dalla colonna totale dell'ordine.
Isolamento
Le letture sporche e le scritture sporche avvengono quando un utente esegue una query nel momento specifico in cui il database sta apportando modifiche a un valore. Ad esempio, se si desidera conoscere il totale di tutti gli ordini del mese, si potrebbe ottenere un risultato errato se si leggono i dati al momento dell'aggiornamento del totale dell'ordine. Lo stesso può accadere con le azioni di scrittura se i dati vengono letti prima che un'istruzione di aggiornamento precedente possa essere eseguita.
Le letture e le scritture sporche possono danneggiare i dati e distruggerne l'integrità. Le transazioni isolate eseguono dichiarazioni una per una, in modo che i dati rimangano coerenti e intatti anche con milioni di transazioni giornaliere. Le transazioni isolate possono bloccare i record, apportare modifiche e rilasciare i record per la transazione successiva.
Durata
Sia i database strutturati che quelli non strutturati devono memorizzare i dati in modo coerente e permanente dopo il completamento di una transazione, anche in caso di guasto del sistema. Devono essere implementati anche i log delle transazioni e i guasti dell'infrastruttura, ma il database stesso deve essere in grado di archiviare i dati in modo coerente e senza causare alcun danneggiamento dei dati. I motori di database hanno le proprie strategie e tecniche di failover, ma gli amministratori devono poter contare su di loro per il ripristino dei dati.
Ad esempio, un'interruzione dell'alimentazione potrebbe interrompere una transazione a metà corsa. Che l'amministratore debba annullare le transazioni o ripristinare i dati, il database deve essere in grado di gestire il guasto. Per la maggior parte degli amministratori, il failover viene gestito anche con backup e ridondanza. L'ACID può essere di aiuto per la strategia di disaster recovery più ampia di un'organizzazione.
Conclusione
I database mission-critical hanno bisogno di proprietà ACID per supportare le applicazioni aziendali. Le proprietà ACID sono essenziali per l'integrità dei dati e per garantire che i dati possano essere recuperati e utilizzati da tutte le applicazioni desiderate. Gli amministratori devono comunque eseguire i backup e assicurarsi che il server di database funzioni correttamente, ma disporre di proprietà ACID è fondamentale per la business continuity.