Come funzionano le transazioni ACID e database?


161

Qual è la relazione tra ACID e transazione del database?

ACID fornisce transazioni di database o è la stessa cosa?

Qualcuno potrebbe illuminare questo argomento.

Risposte:


320

ACID è un insieme di proprietà che si desidera applicare quando si modifica un database.

  • Atomicita
  • Consistenza
  • Isolamento
  • durabilità

Una transazione è un insieme di modifiche correlate che viene utilizzato per ottenere alcune delle proprietà ACID. Le transazioni sono strumenti per ottenere le proprietà ACID.

Atomicity significa che puoi garantire che tutte le transazioni avvengano, o nessuna di esse; è possibile eseguire operazioni complesse come un'unica unità, tutto o niente, e un arresto anomalo, un'interruzione di corrente, un errore o qualsiasi altra cosa non consente di trovarsi in uno stato in cui sono avvenute solo alcune delle relative modifiche.

Coerenza significa che garantisci che i tuoi dati saranno coerenti; nessuno dei vincoli che hai sui dati correlati verrà mai violato.

Isolamento significa che una transazione non può leggere i dati da un'altra transazione non ancora completata. Se due transazioni vengono eseguite contemporaneamente, ognuna vedrà il mondo come se stesse eseguendo in sequenza, e se uno deve leggere i dati scritti da un altro, dovrà attendere fino a quando l'altro non sarà terminato.

Durabilità significa che una volta completata una transazione, è garantito che tutte le modifiche sono state registrate su un supporto durevole (come un disco rigido) e che anche la transazione è stata completata.

Quindi, le transazioni sono un meccanismo per garantire queste proprietà; sono un modo per raggruppare le azioni correlate in modo tale che, nel suo insieme, un gruppo di operazioni può essere atomico, produrre risultati coerenti, essere isolato da altre operazioni ed essere registrato in modo duraturo.


6
Dici "Coerenza significa che garantisci che i tuoi dati saranno coerenti; nessuno dei vincoli che hai sui dati correlati verrà mai violato". Se per vincoli intendi quelli definiti nel database (ad esempio, controllare i vincoli), cosa ha a che fare la gestione delle transazioni con la prevenzione della loro violazione? Non sono sempre in vigore? Mi sembra che la C in ACID debba avere un altro significato.
Marc Rochkind,

20
@MarcRochkind Una transazione consente di applicare controlli di coerenza anche se le singole operazioni all'interno della transazione violerebbero i vincoli di coerenza. Ad esempio, se si sta aggiornando un sistema di contabilità a doppia entrata, potrebbe essere necessario addebitare da più conti e accreditare su più conti contemporaneamente. Senza transazioni, verifichi i vincoli dopo ogni istruzione e falliresti perché le singole istruzioni non conservano la coerenza. Con le transazioni, sebbene le singole dichiarazioni non mantengano la coerenza, la transazione nel suo insieme lo fa.
Brian Campbell,

1
" e se uno ha bisogno di leggere i dati scritti da un altro, dovrà attendere fino a quando l'altro non sarà finito " - non è del tutto vero. La prima transazione può (e leggerà) quei dati e vedrà lo stato com'era prima dell'inizio della seconda transazione.
a_horse_with_no_name

1
@BrianCampbell 1) La coerenza è sia "controllare i vincoli" come UNIQUE, FOREIGN KEY sia lo stato valido (in base alla logica / ai requisiti aziendali dell'applicazione) al termine della transazione? 2) L'atomicità e / o l'isolamento da soli non garantiscono la coerenza? Dovremmo menzionare esplicitamente la coerenza come proprietà richiesta?
user104309

1
@a_horse_with_no_name stai parlando di OCC (controllo della concorrenza ottimistico) v / s PCC (pessimistico). Entrambi possono essere implementati in un sistema di database conforme ACID, a seconda che si tratti di coerenza o disponibilità elevata.
Siddhartha,

37

Gli ACID sono proprietà desiderabili di qualsiasi motore di elaborazione delle transazioni.

Un DBMS è (se va bene) un particolare tipo di motore di elaborazione delle transazioni che espone, di solito in larga misura ma non del tutto, quelle proprietà.

Ma esistono altri motori che possono anche esporre quelle proprietà. Il tipo di software che un tempo si chiamava "monitor TP" è un esempio emblematico (oggi l'equivalente è principalmente un server Web).

Tali monitor TP possono accedere a risorse diverse da un DBMS (ad esempio una stampante) e garantire comunque ACID ai propri utenti. Come esempio di cosa potrebbe significare ACID quando una stampante è coinvolta in una transazione:

  • Atomicità: un intero documento viene stampato o niente affatto
  • Coerenza: alla fine della transazione, l'alimentazione della carta viene posizionata nella parte superiore della pagina
  • Isolamento: durante la stampa non si confondono due documenti
  • Durata: la stampante può garantire che non "stampa" con cartucce vuote.

3
ottimi esempi di stampante concisa.
Lakesare

2
Buon esempio. Non capisco però la parte "Coerenza". Nella mia mente, un esempio migliore è "La stampante non accetta carta di dimensioni superiori a 10 pollici".
skeller88,

EDIT - "carta più larga di 10 pollici".
skeller88,

1
Ammetto che uno è un po 'allungato. Ma è difficile trovare esempi migliori perché la "coerenza" riguarda i dati e una stampante non è esattamente un dispositivo dati.
Erwin Smout,

1
Bene, allora la stampante ha una funzione che gli impedisce di iniziare a stampare se il conteggio delle pagine di un documento è superiore al conteggio dei fogli attualmente noto per essere nella carta. Vedi che questo è il problema con molte persone che commentano qui. Tu citi "stampante" e vedono solo quel muto dispositivo di streaming seriale che hanno sulla loro scrivania di casa, non il dispositivo professionale di alto livello che riempirebbe l'intero soggiorno (e che spesso ha quel tipo di funzionalità che ho citato).
Erwin Smout,

21

Ho leggermente modificato l'esempio della stampante per renderlo più spiegabile

1 documento con contenuto di 2 pagine è stato inviato alla stampante

Transazione : documento inviato alla stampante

  • atomicità : la stampante stampa 2 pagine di un documento o nessuna
  • coerenza : la stampante stampa mezza pagina e la pagina si blocca. La stampante si riavvia da sola e stampa 2 pagine con tutto il contenuto
  • isolamento - mentre erano in corso troppe stampe - la stampante stampa il giusto contenuto del documento
  • durata - durante la stampa, si è verificata un'interruzione dell'alimentazione - la stampante stampa nuovamente i documenti senza errori

Spero che questo aiuti qualcuno a capire il concetto di ACID


Non sono sicuro di cosa significhi "mentre erano in corso troppe stampe": è solo "multiplo" anziché "troppi"?
icc97,

17

Qual è la relazione tra ACID e transazione del database?

In un database relazionale, ogni istruzione SQL deve essere eseguita nell'ambito di una transazione.

Senza definire esplicitamente i confini della transazione, il database utilizzerà una transazione implicita che avvolge ogni singola istruzione.

La transazione implicita inizia prima dell'esecuzione dell'istruzione e termina (commit o rollback) dopo l'esecuzione dell'istruzione. La modalità di transazione implicita è comunemente nota come autocommit.

Come spiegato in questo articolo , una transazione è una raccolta di operazioni di lettura / scrittura riuscite solo se tutte le operazioni contenute hanno esito positivo.

Atomicita

Inerentemente una transazione è caratterizzata da quattro proprietà (comunemente denominate ACID):

  • Atomicita
  • Consistenza
  • Isolamento
  • durabilità

ACID fornisce transazioni di database o è la stessa cosa?

Per un sistema di database relazionale, questo è vero perché lo standard SQL specifica che una transazione dovrebbe fornire le garanzie ACID:

Atomicita

L'atomicità prende le singole operazioni e le trasforma in un'unità di lavoro tutto o niente, riuscendo se e solo se tutte le operazioni contenute hanno successo.

Una transazione potrebbe incapsulare un cambio di stato (a meno che non sia di sola lettura). Una transazione deve sempre lasciare il sistema in uno stato coerente, indipendentemente dal numero di transazioni simultanee intercalate in un dato momento.

Consistenza

Coerenza significa che i vincoli vengono applicati per ogni transazione impegnata. Ciò implica che tutte le chiavi, i tipi di dati, i controlli e il trigger hanno esito positivo e che non viene attivata alcuna violazione dei vincoli.

Isolamento

Le transazioni richiedono meccanismi di controllo della concorrenza e garantiscono la correttezza anche quando vengono intercalate. L'isolamento ci offre il vantaggio di nascondere cambiamenti di stato non impegnati dal mondo esterno, poiché le transazioni non riuscite non dovrebbero mai corrompere lo stato del sistema. L'isolamento si ottiene attraverso il controllo della concorrenza mediante meccanismi di blocco pessimistici o ottimistici.

durabilità

Una transazione riuscita deve cambiare in modo permanente lo stato di un sistema e, prima di terminarlo, le modifiche allo stato vengono registrate in un registro delle transazioni persistente. Se il nostro sistema viene improvvisamente influenzato da un arresto anomalo del sistema o un'interruzione dell'alimentazione, è possibile riprodurre tutte le transazioni impegnate non finite.

inserisci qui la descrizione dell'immagine

Per ulteriori dettagli su Durabilità e Registro di ripetizione, consulta questo articolo .


Per "coerenza", vedo la "correttezza logica specifica dell'applicazione" come la spiegazione in molti punti. Supponiamo che, in questo caso, DB non sia in grado di conoscere la logica dell'app. Quindi la "coerenza" non può essere una proprietà intrinseca di un DB. Quindi, per l'app di implementare la sua correttezza (o "coerenza") non sono sufficienti Atomicity e Isolation?
user104309

1
Coerenza in ACID significa vincoli di integrità del database: vincoli PK, FK, UNIQUE. L'ACID è importante, ma l'applicazione potrebbe aver bisogno di più di questo, come prevenire gli aggiornamenti persi in lunghe conversazioni che richiedono un blocco ottimistico a livello di applicazione.
Vlad Mihalcea,

Fammi dare un'occhiata. Ma prima ho bisogno di un chiarimento di base. Il commento di Brain Campbell nella risposta accettata "Con le transazioni, sebbene le singole dichiarazioni non mantengano la coerenza, la transazione nel suo insieme". Come è possibile ? E in che modo più debiti e crediti sono correlati alla coerenza?
user104309

Dai un'occhiata al capitolo Transazioni nel mio libro Persistenza di Java ad alte prestazioni per una risposta dettagliata a tutte queste domande.
Vlad Mihalcea,

12

Le proprietà ACID sono un concetto molto antico e importante della teoria dei database. So che puoi trovare molti post su questo argomento, ma vorrei comunque iniziare a condividere la risposta su questo perché questo è un argomento molto importante di RDBMS.

Database System gioca con molti tipi diversi di transazioni in cui tutte le transazioni hanno determinate caratteristiche. Questa caratteristica è nota Proprietà ACID. Le proprietà ACID sono utili per tutte le transazioni del database per eseguire tutte le attività.

Atomicità: commettere tutto o niente.

Coerenza: registrare coerentemente in termini di convalida di tutte le regole e vincoli della transazione.

Isolamento: assicurarsi che due transazioni non siano consapevoli l'una dell'altra.

Durabilità: dati impegnati memorizzati per sempre. Riferimento tratto da questo articolo:


5

Per citare Wikipedia :

ACID (atomicità, coerenza, isolamento, durata) è un insieme di proprietà che garantiscono che le transazioni del database vengano elaborate in modo affidabile.

Un DBMS che supporta le transazioni si adopererà per supportare tutte queste proprietà - qualsiasi DBMS commerciale (così come diversi DBMS open source) fornisce un "supporto" ACID completo - sebbene sia spesso possibile (ad esempio, con livelli di isolamento variabili in MSSQL) ridurre l'ACIDness - perdendo così la garanzia di un comportamento completamente transazionale.


3

[Gray] ha introdotto le proprietà ACD per una transazione nel 1981. Nel 1983 [Haerder] ha aggiunto la proprietà Isolation. A mio avviso, le proprietà ACD avrebbero un insieme di proprietà più utile da discutere. Un'interpretazione di Atomicity (che la transazione dovrebbe essere atomica come vista da qualsiasi client in qualsiasi momento) implicherebbe effettivamente la proprietà di isolamento. La proprietà "isolamento" è utile quando la transazione non è isolata; quando la proprietà di isolamento è rilassata. In ANSI SQL parlare: se il livello di isolamento è più debole, SERIALIZZABILE. Ma quando il livello di isolamento è SERIALIZZABILE, la proprietà di isolamento non è realmente interessante.

Ho scritto di più su questo in un post sul blog: "ACID non ha senso".

http://blog.franslundberg.com/2013/12/acid-does-not-make-sense.html

[Gray] The Transaction Concept, Jim Gray, 1981. http://research.microsoft.com/en-us/um/people/gray/papers/theTransactionConcept.pdf

[Haerder] Principi di recupero del database orientato alle transazioni, Haerder e Reuter, 1983. http://www.stanford.edu/class/cs340v/papers/recovery.pdf


1

La transazione può essere definita come una raccolta di attività considerate come unità di elaborazione minima. Ogni unità di elaborazione minima non può essere ulteriormente suddivisa.

Tutte le transazioni devono contenere quattro proprietà comunemente note come proprietà ACID. vale a dire ACID sono il gruppo di proprietà di qualsiasi transazione.

  • Atomicita :
  • Consistenza
  • Isolamento
  • durabilità
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.