Transazioni ACID
Che cos'è una transazione?
Quando si parla di database e sistemi di stoccaggio dei dati, per transazione si intende qualsiasi operazione gestita come singola unità di lavoro, che viene portata a termine oppure non viene completata del tutto, lasciando il sistema di stoccaggio in uno stato coerente. Un esempio classico di transazione è il prelievo di contanti da un conto corrente. Il denaro viene prelevato dal conto corrente oppure resta depositato: non ci possono essere situazioni intermedie.
Proprietà A.C.I.D.: Atomicity, Consistency, Isolation e Durability (Atomicità, Coerenza, Isolamento e Durabilità)
ACID è un acronimo composto dalle 4 proprietà chiave che definiscono una transazione: Atomicity, Consistency, Isolation, e Durability. Se un'operazione su un database ha queste proprietà ACID, può essere definita transazione ACID e i sistemi di stoccaggio dei dati che eseguono queste operazioni vengono definiti sistemi transazionali. Le transazioni ACID garantiscono che ogni operazione di lettura, scrittura o modifica su una tabella abbia le seguenti proprietà:
- Atomicità - ogni dichiarazione nella transazione (leggere, scrivere, aggiornare o cancellare dati) viene gestita come singola unità. La dichiarazione può essere eseguita solo interamente, altrimenti non viene eseguita. Questa proprietà impedisce che i dati vadano persi o vengano corrotti nel caso in cui, ad esempio, la sorgente di dati in streaming venga interrotta a metà del flusso.
- Coerenza - questa proprietà garantisce che le transazioni apportino modifiche alle tabelle solo con modalità predefinite e prevedibili. La coerenza transazionale garantisce che alterazioni o errori nei dati non producano conseguenze indesiderate sull'integrità della tabella.
- Isolamento - quando più utenti leggono e scrivono contemporaneamente sulla stessa tabella, l'isolamento delle loro transazioni assicura che transazioni contemporanee non interferiscano fra loro. Ogni richiesta viene gestita come se fosse l'unica, anche se in realtà sono in corso molteplici transazioni simultaneamente.
- Durabilità - le modifiche ai dati apportate da transazioni eseguite con successo vengono salvate, anche in caso di guasto del sistema.
Perché è bene poter utilizzare transazioni ACID?
Le transazioni ACID assicurano il massimo livello possibile di affidabilità e integrità dei dati. Garantiscono che i dati non finiscano mai in una condizione di incoerenza a causa del completamento solo parziale di un'operazione. Ad esempio, senza transazioni ACID, se si stanno scrivendo dati in una tabella di database ma si verifica un blackout elettrico, è possibile che vengano salvati solo alcuni dati, mentre altri vadano persi. A quel punto il database si troverebbe in uno stato di incoerenza, che richiederebbe interventi di ripristino lunghi e comunque difficili.
Delta Lake: dati affidabili e coerenti con le garanzie delle transazioni ACID
Le transazioni ACID sono da tempo una delle proprietà più apprezzate dei data warehouse, ma ora Delta Lake le ha estese anche ai data lake. Gli utenti possono così vedere viste coerenti dei loro dati anche quando è in corso la scrittura di nuovi dati nella tabella in tempo reale, perché ogni operazione di scrittura è una transazione isolata che viene memorizzata in un registro di transazioni ordinato. [Delta Lake utilizza il massimo livello possibile di isolamento (isolamento serializzabile), garantendo che le letture e le scritture in una singola tabella siano coerenti e affidabili.] Implementando le transazioni ACID, Delta Lake risolve efficacemente le criticità dell'architettura Lambda citate in precedenza: complessità, viste di dati non corrette, necessità di rilavorazioni e rielaborazioni dopo gli inevitabili guasti delle pipeline Lambda. Gli utenti possono effettuare molteplici transazioni contemporanee sui loro dati e, in caso di errori in una sorgente o un flusso di dati, Delta Lake annulla l'esecuzione della transazione per assicurare che i dati restino puliti e intatti. Il bello delle transazioni ACID è che gli utenti si possono fidare dei dati memorizzati in Delta Lake. Un analista di dati che usa tabelle Delta Lake per effettuare procedure ETL per preparare i dati per la visualizzazione su dashboard può contare sul fatto che i KPI visualizzati rispecchino lo stato effettivo dei dati. Un tecnico di machine learning che usa tabelle Delta Lake per la progettazione di feature può essere sicuro al 100% che tutte le trasformazioni e le aggregazioni siano state eseguite come previsto oppure non siano state eseguite del tutto (e, in tal caso, riceverebbe una notifica). Sapere che l'idea che si ha dei propri dati coincide esattamente con la loro condizione effettiva ha un valore incommensurabile.