Video: Acid Grace — A MUST WATCH for Advanced Seekers!!! 2024
Un segno distintivo dei sistemi di database relazionali è noto come conformità ACID. Come avrete intuito, ACID è un acronimo: le singole lettere, pensate per descrivere una caratteristica delle singole transazioni del database, possono essere espanse come descritto in questo elenco:
-
Atomicità: La transazione del database deve essere completamente avere successo o fallire completamente. Il successo parziale non è permesso.
-
Consistenza: Durante la transazione del database, l'RDBMS passa da uno stato valido a un altro. Lo stato non è mai valido.
-
Isolamento: La transazione del database del client deve avvenire separatamente dagli altri client che tentano di effettuare transazioni con RDBMS.
-
Durata: L'operazione di dati che faceva parte della transazione deve essere riflessa in memoria non volatile (memoria del computer in grado di recuperare le informazioni memorizzate anche quando non sono alimentate - come un disco rigido) e persistere dopo la transazione è stata completata con successo. Gli errori di transazione non possono lasciare i dati in uno stato parzialmente commesso.
Alcuni casi d'uso per RDBMS, come l'elaborazione delle transazioni online, dipendono da transazioni conformi a ACID tra il client e RDBMS affinché il sistema funzioni correttamente. Un ottimo esempio di transazione conforme ACID è un trasferimento di fondi da un conto bancario a un altro.
Si divide in due transazioni di database, in cui l'account di origine mostra un prelievo e l'account di destinazione mostra un deposito. Ovviamente, queste due transazioni devono essere legate insieme in modo da essere valide in modo che se uno di loro fallisce, l'intera operazione non deve garantire che entrambi i saldi rimangano validi.
Hadoop stesso non ha alcun concetto di transazioni (o anche di record, se è per questo), quindi chiaramente non è un sistema compatibile con ACID. Pensando in modo più specifico all'archiviazione dei dati e all'elaborazione dei progetti nell'intero ecosistema Hadoop, nessuno di questi è pienamente compatibile con ACID. Tuttavia, fanno riflettono le proprietà che si vedono spesso negli archivi dati NoSQL, quindi esistono alcuni precedenti all'approccio Hadoop.
Un concetto chiave alla base degli archivi dati NoSQL è che non tutte le applicazioni richiedono realmente transazioni conformi a ACID. Rilassarsi su alcune proprietà ACID (e allontanarsi dal modello relazionale) ha aperto una miriade di possibilità, che hanno consentito ad alcuni data store NoSQL di ottenere un'enorme scalabilità e prestazioni per le loro applicazioni di nicchia.
Mentre ACID definisce le caratteristiche chiave richieste per l'elaborazione affidabile delle transazioni, il mondo NoSQL richiede caratteristiche diverse per consentire flessibilità e scalabilità.Queste caratteristiche opposte vengono abilmente catturate nell'acronimo BASE:
-
B asalmente A vailable: Il sistema è garantito per essere interrogato da tutti gli utenti. (Nessun isolamento qui.)
-
S stato: I valori memorizzati nel sistema possono cambiare a causa del modello di consistenza finale, come descritto nel prossimo punto.
-
E ventualmente coerente: Man mano che i dati vengono aggiunti al sistema, lo stato del sistema viene gradualmente replicato su tutti i nodi. Ad esempio, in Hadoop, quando un file viene scritto su HDFS, le repliche dei blocchi di dati vengono create in diversi nodi di dati dopo che i blocchi di dati originali sono stati scritti. Per il breve periodo prima della replica dei blocchi, lo stato del file system non è coerente.
L'acronimo BASE è un po 'forzato, poiché la maggior parte dei data store NoSQL non abbandona completamente tutte le caratteristiche ACID - in altre parole, non è proprio il concetto opposto. Inoltre, le caratteristiche Soft State e Eventually Consistent equivalgono alla stessa cosa, ma il punto è che rilassando la coerenza, il sistema può scalare orizzontalmente (molti nodi) e garantire la disponibilità.
Nessuna discussione su NoSQL sarebbe completa senza menzionare il teorema CAP, che rappresenta i tre tipi di garanzie che gli architetti mirano a fornire nei loro sistemi:
-
Coerenza: Simile alla C in ACID, tutti i nodi in il sistema avrebbe la stessa visione dei dati in qualsiasi momento.
-
Disponibilità: Il sistema risponde sempre alle richieste.
-
Tolleranza partizione: Il sistema rimane online se si verificano problemi di rete tra i nodi di sistema.
Il teorema CAP afferma che nei sistemi distribuiti in rete, gli architetti devono scegliere due di queste tre garanzie: non è possibile promettere ai propri utenti tutti e tre. Ciò ti lascia con le tre possibilità mostrate:
-
I sistemi che utilizzano le tecnologie relazionali tradizionali normalmente non sono tolleranti alle partizioni, quindi possono garantire coerenza e disponibilità. In breve, se una parte di questi sistemi di tecnologie relazionali tradizionali è offline, l'intero sistema è offline.
-
I sistemi in cui la tolleranza e la disponibilità delle partizioni sono di importanza primaria non possono garantire la coerenza, poiché gli aggiornamenti (il distruttore di consistenza) possono essere eseguiti su entrambi i lati della partizione. I negozi con valore chiave Dynamo e CouchDB e il negozio di famiglia di colonne Cassandra sono esempi popolari di sistemi di tolleranza / disponibilità delle partizioni (PA).
-
I sistemi dove tolleranza e coerenza delle partizioni sono di importanza primaria non possono garantire la disponibilità perché i sistemi restituiscono errori fino a quando lo stato partizionato non viene risolto.
Gli archivi dati basati su Hadoop sono considerati sistemi CP ( c tolleranti all'arte esistenti e p ). Con i dati archiviati in modo ridondante su molti nodi slave, è possibile tollerare le interruzioni di ampie porzioni (partizioni) di un cluster Hadoop. Hadoop è considerato coerente poiché ha un archivio di metadati centrale (il NameNode) che mantiene una vista unica e coerente dei dati memorizzati nel cluster.