Qual è la differenza tra un database ACID e un database BASE?


Qual è la differenza tra un database ACID e un database BASE?

ACID e BASE sono modelli di transazioni di database che determinano in che modo un database organizza e gestisce i dati. Nel contesto dei database, una transazione è qualsiasi operazione che il database considera una singola unità di lavoro. Una transazione deve essere completata interamente affinché il database rimanga coerente. Ad esempio, quando si trasferisce denaro da un conto bancario a un altro, il denaro deve essere prelevato dal proprio conto per essere accreditato a quello di terzi. Non è possibile definire completa la transazione senza che siano state eseguite entrambe le operazioni. 

I database ACID danno priorità alla coerenza rispetto alla disponibilità: l'intera transazione fallisce se si verifica un errore in qualsiasi fase della transazione. Al contrario, i database BASE danno priorità alla disponibilità rispetto alla coerenza. Anziché far fallire la transazione, gli utenti possono accedere temporaneamente a dati inconsistenti. La coerenza dei dati viene raggiunta, ma non immediatamente.

Perché ACID e BASE sono importanti?

I database moderni sono archivi di dati distribuiti che replicano i dati su nodi multipli collegati in una rete. Consentono agli utenti di eseguire manipolazioni multiple di dati come letture e scritture in un'unica transazione. Gli utenti si aspettano che i dati rimangano coerenti su tutti i nodi al termine della transazione. Tuttavia, in informatica teorica, il teorema di Brewer (chiamato anche teorema CAP) afferma che qualsiasi archivio di dati distribuito può fornire solo due delle tre garanzie seguenti:

  • Coerenza: ogni operazione di lettura riceve i dati aggiornati più di recente o un errore.
  • Disponibilità: ogni richiesta del database riceve una risposta valida, senza garantire che contenga i dati aggiornati più di recente.
  • Tolleranza della partizione: il sistema continua a funzionare nonostante la perdita o il ritardo dei messaggi tra i nodi distribuiti.

Ad esempio, se un cliente aggiunge un articolo a un carrello su un sito di e-commerce, tutti gli altri clienti dovrebbero vedere diminuire le quantità delle scorte del prodotto. Se il cliente aggiunge l'ultimo articolo al carrello, tutti gli altri utenti dovrebbero visualizzare l'articolo come esaurito. Nel caso in cui un'operazione fallisca all'interno di una transazione, i progettisti del database devono fare una scelta. Il database può eseguire una delle seguenti operazioni:

  1. annullare la transazione e riportare un errore, riducendo la disponibilità ma garantendo la coerenza. Il cliente non può aggiungere l'articolo al carrello o gli altri clienti non possono caricare i dettagli di tutti i prodotti finché l'aggiunta al carrello non viene completata correttamente.
  2. Procedere con l'operazione e quindi garantire la disponibilità ma con il rischio di incoerenza. Il cliente aggiunge un articolo al carrello, ma gli altri clienti visualizzano quantità di scorte errate, almeno temporaneamente.

In alcuni casi d'uso, la coerenza è fondamentale e si preferiscono i database ACID. Tuttavia, ci sono altri casi d'uso in cui questa non è essenziale. Ad esempio, quando si accetta una richiesta di amicizia sui social media, non è importante se gli altri utenti vedono temporaneamente un numero errato di amici sul profilo social. In ogni caso, non si vuole perdere l'accesso al feed dei social mentre i dati vengono ordinati. In tali scenari, BASE diventa importante.

Principi chiave di ACID e BASE

ACID e BASE sono acronimi per diverse proprietà di database che rappresentano il comportamento del database durante l'elaborazione delle transazioni online. 

ACID

ACID è l'acronimo di atomicità, coerenza, isolamento e durabilità.

Atomicità

L'atomicità garantisce che tutte le fasi di una singola transazione del database siano completate o ripristinate allo stato originale. Ad esempio, in un sistema di prenotazione, entrambe le operazioni (prenotazione dei posti e aggiornamento dei dettagli dei clienti) devono essere completate in un'unica transazione. Non è possibile prenotare posti per un profilo cliente incompleto. Non viene apportata alcuna modifica ai dati in caso di fallimento di una qualunque parte della transazione.

Coerenza

La coerenza garantisce che i dati soddisfino vincoli di integrità e regole aziendali predefiniti. Anche se più utenti eseguono simultaneamente operazioni simili, i dati rimangono coerenti per tutti. Ad esempio, la coerenza garantisce che quando si trasferiscono fondi da un conto all'altro, il saldo totale prima e dopo la transazione rimanga invariato. Se il conto A ha 200 USD e il conto B ne ha 400, il saldo totale equivale a 600 USD. Dopo aver effettuato il versamento di 100 USD da parte di A a B, A ha 100 USD e B ha 500 USD. Il saldo totale è ancora 600 USD. 

Isolamento

L'isolamento garantisce che una nuova transazione che accede ad un record specifico attenda che la transazione precedente termini prima di iniziare l'operazione. Assicura che le transazioni simultanee non interferiscano tra loro, mantenendo l'illusione che vengano eseguite in serie. Un altro esempio è un sistema di gestione dell'inventario multiutente. Se un utente aggiorna la quantità di prodotto, un altro utente che accede alle stesse informazioni sul prodotto avrà una visione coerente e isolata dei dati, non influenzata dall'aggiornamento in corso fino a quando non viene effettuato il commit.

Durabilità

La durabilità assicura che il database mantenga tutti i record salvati, anche in caso di errore del sistema. Assicura che quando le transazioni ACID vengono eseguite, tutte le modifiche siano permanenti e non influenzate da successivi errori di sistema. Ad esempio, in un'applicazione di messaggistica, quando un utente invia un messaggio e riceve una conferma di avvenuta consegna, la proprietà di durabilità assicura che il messaggio non vada mai perso. Ciò avviene anche in caso di guasto applicazione o del server.

BASE

BASE è l'acronimo inglese di Basically Available, Soft State ed Evenutally Consistent (disponibilità nella maggior parte dei casi; stato instabile; coerenza finale). L'acronimo evidenzia come BASE sia l'opposto di ACID, come i loro equivalenti chimici.

Basically available

Basically available (nella maggior parte dei casi) indica l'accessibilità simultanea del database da parte degli utenti in ogni momento. Un utente non deve attendere che gli altri completino la transazione prima di aggiornare il record. Ad esempio, durante un improvviso aumento del traffico su una piattaforma di e-commerce, il sistema potrebbe dare priorità agli elenchi dei prodotti e all'accettazione degli ordini. Anche in caso di leggero ritardo nell'aggiornamento delle quantità di inventario, gli utenti continuano a effettuare il check-out degli articoli.

Soft state

Il Soft state (stato instabile) rimanda all'idea che i dati possono avere stati transitori o temporanei che possono cambiare nel tempo, anche in assenza di trigger o input esterni. Descrive lo stato transitorio del record quando diverse applicazioni lo aggiornano contemporaneamente. Il valore del record è finalizzato solo al termine di tutte le transazioni. Ad esempio, se gli utenti modificano un post sui social media, la modifica potrebbe non essere immediatamente visibile agli altri utenti. Tuttavia, in seguito, il post si aggiorna automaticamente (in base alla modifica precedente) anche se nessun utente l'ha attivato.

Eventually consistent

Eventually consistent (coerenza finale) significa che il record raggiungerà la coerenza quando tutti gli aggiornamenti simultanei saranno completati. A questo punto, le applicazioni che eseguono query sul record vedranno lo stesso valore. Ad esempio, si consideri un sistema di editing dei documenti distribuito in cui più utenti possono modificare contemporaneamente un documento. Se l'utente A e l'utente B modificano insieme e in contemporanea la stessa sezione del documento, le rispettive copie locali potrebbero differire temporaneamente fino a quando le modifiche non vengono propagate e sincronizzate. Tuttavia, nel corso del tempo, il sistema garantisce la coerenza finale propagando e unendo le modifiche apportate da diversi utenti.

Differenze principali tra ACID e BASE

La scelta tra i modelli di transazione dei database ACID e BASE comporta dei compromessi.

Scalabilità

Dimensionare un modello di transazione del database ACID risulta più difficoltoso, in quanto si concentra sulla coerenza. È consentita una sola transazione per ogni record in qualsiasi momento, il che rende più impegnativo il dimensionamento orizzontale. 

In alternativa, è possibile dimensionare orizzontalmente il modello di database BASE, in quanto non è necessario mantenere una coerenza rigorosa. L'aggiunta di nodi multipli nel cluster di database permette al modello BASE di migliorare la disponibilità dei dati, che è il principio alla base dell'architettura del database. 

Flessibilità

I database ACID sono meno flessibili nella gestione dei dati. Devono garantire una coerenza immediata, un database ACID può limitare l'accesso ad alcune applicazioni in caso di interruzioni della rete o dell'alimentazione. Analogamente, le applicazioni devono attendere il proprio turno per aggiornare i dati se altri moduli software stanno elaborando un determinato record. Al contrario, i database BASE sono più flessibili. Piuttosto che imporre restrizioni rigorose, BASE consente alle applicazioni di modificare i record quando sono disponibili. 

Prestazioni

Un database ACID potrebbe riscontrare problemi di prestazioni nella gestione di grandi volumi di dati o richieste di elaborazione simultanee. Poiché i dati vengono elaborati in un ordine rigoroso, il sovraccarico di ogni transazione crea ritardi che si ripercuotono su tutte le applicazioni che accedono al record. 

Al contrario, le applicazioni che accedono a un database BASE possono elaborare i record in qualsiasi momento. Ciò riduce i tempi di attesa eccessivi e migliora la velocità di trasmissione effettiva del database.

Sincronizzazione

Un database ACID necessita di un meccanismo di sincronizzazione per eseguire il commit delle modifiche da una transazione e riportarle in tutti i record associati. Allo stesso tempo, deve bloccare il record specifico da altre parti finché la transazione non viene completata o scartata. Nel frattempo, un database BASE funziona senza bloccare i record, sincronizzandoli all'occorrenza senza garanzie temporali. Quando lavorano con i database BASE, gli sviluppatori sanno che potrebbero esserci delle incongruenze durante l'elaborazione di determinati record e adottano le precauzioni necessarie nell'applicazione. 

Quando utilizzare ACID e quando BASE

Nonostante le differenze, sia i sistemi di database ACID che quelli BASE sono rilevanti per diverse applicazioni. ACID è l'opzione ideale per le applicazioni per grandi aziende che richiedono coerenza, affidabilità e prevedibilità dei dati. Ad esempio, le banche utilizzano un database ACID per archiviare le transazioni dei clienti perché l'integrità dei dati costituisce la priorità assoluta. Invece, i database BASE sono una scelta migliore per l'elaborazione analitica online di dati meno strutturati e ad alto volume. Ad esempio, i siti di e-commerce utilizzano i database BASE per l'aggiornamento dei prezzi dei prodotti, che cambiano frequentemente. In questo caso, l'accuratezza dei prezzi risulta meno importante rispetto alla possibilità di consentire a tutti i clienti l'accesso in tempo reale al prezzo del prodotto.

Un database può essere sia ACID che BASE?

Secondo il teorema CAP, un database può soddisfare due delle tre garanzie di coerenza, disponibilità e tolleranza della partizione. Sia il modello di database ACID che quello BASE forniscono tolleranza della partizione, il che significa che non possono essere altamente coerenti e sempre disponibili allo stesso tempo. Quindi, un database tende verso ACID o BASE, ma non può essere entrambi. Ad esempio, i database SQL sono strutturati secondo il modello ACID, mentre i database NoSQL utilizzano l'architettura BASE. Tuttavia, alcuni database NoSQL potrebbero presentare alcune caratteristiche ACID, ma non possono funzionare come database conformi ad ACID. 

Riepilogo delle differenze: ACID vs BASE

 

ACID

BASE

Scalabilità

Dimensiona verticalmente.

Dimensiona orizzontalmente.

Flessibilità

Minore flessibilità. Blocca record specifici provenienti da altre applicazioni durante l'elaborazione. 

Maggiore flessibilità. Consente a più applicazioni di aggiornare lo stesso record contemporaneamente.

Prestazioni

Le prestazioni diminuiscono quando si elaborano grandi volumi di dati.

In grado di gestire dati di grandi dimensioni non strutturati con un'elevata velocità di trasmissione effettiva. 

Sincronizzazione

Sì. Aggiunge un ritardo durante la sincronizzazione. 

Nessuna sincronizzazione a livello di database. 

In che modo AWS può supportare i requisiti inerenti ai database ACID e BASE?

I database cloud AWS forniscono una serie di servizi di database ACID e BASE per qualsiasi tipologia di caso d'uso dei dati. Le organizzazioni distribuiscono i propri database su AWS per risparmiare tempo nelle operazioni di provisioning, dimensionamento e gestione dell'infrastruttura di archiviazione di dati. Ad esempio:

  • Amazon DynamoDB è un servizio di database BASE veloce che consente l'elaborazione di dati in millisecondi per applicazioni cloud.
  • Amazon MemoryDB per Redis è un altro database BASE che consente agli sviluppatori di distribuire database Redis durevoli e a disponibilità elevata per applicazioni Web e per dispositivi mobili.
  • AWS RedShift è un data warehouse cloud ACID che consente di eseguire query analitiche SQL complesse per casi d'uso di business intelligence. 

Inizia subito a utilizzare i database ACID e BASE creando un account oggi stesso.