ACID: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m Bibliografia: Aggiunto autore
Fix vari. Rivista struttura della voce in preparazione a interventi successivi.
Riga 1:
{{Nota disambigua|la pagina di test per i browser web|titolo=Acid1|titolo2=Acid2|titolo3=Acid3}}
{{NN|informatica|marzo 2024}}
Nell'ambito dei [[database]], '''ACID''' deriva dall'[[acronimo]] inglese '''Atomicity''', '''Consistency''', '''Isolation''', e '''Durability''' ('''A'''tomicità, '''C'''oerenza, '''I'''solamento e '''D'''urabilità) ed indica le proprietà logiche che devono avere le [[transazione (basi di dati)|transazioni]].
 
Nell'ambito dei [[database]], '''ACID''' è un [[acronimo]] che riassume quattro proprietà particolarmente desiderabili in un [[DBMS]], ovvero: '''A'''tomicità, '''C'''oerenza, '''I'''solamento e '''D'''urabilità ({{lett|Atomicity, Consistency, Isolation, and Durability|lingua=en}}). Queste vengono tipicamente soddisfatte attraverso l'[[implementazione]] del meccanismo delle [[transazione (basi di dati)|transazioni]].
 
== Descrizione ==
=== Atomicità ===
Affinché le transazioni operino in modo corretto sui dati è necessario che i meccanismi che le implementano soddisfino queste quattro proprietà:
* '''Atomica''': il processo deve essere suddivisibile in un numero finito di unità indivisibili, chiamate ''transazioni''. L'esecuzione di una transazione perciò deve essere per definizione o totale o nulla, e non sono ammesse esecuzioni parziali; un processo, anche parziale, invece, in quanto insieme di transazioni può non essere elementare.
*'''Coerente''': il database rispetta i [[vincolo di integrità|vincoli di integrità]], sia a inizio che a fine transazione. Non devono verificarsi contraddizioni (''incoerenza dei dati'') tra i dati archiviati nel DB;
* '''Isolata''': ogni transazione deve essere eseguita in modo isolato e indipendente dalle altre transazioni, l'eventuale fallimento di una transazione non deve interferire con le altre transazioni in esecuzione;
* '''Durevole''': detta anche '''persistente''', si riferisce al fatto che una volta che una transazione abbia richiesto un ''commit work'', i cambiamenti apportati non dovranno essere più persi. Per evitare che nel lasso di tempo fra il momento in cui la base di dati si impegna a scrivere le modifiche e quello in cui le scrive effettivamente si verifichino perdite di dati dovuti a malfunzionamenti, vengono tenuti dei registri di log dove sono annotate tutte le operazioni sul DB.
 
* '''Atomica''': ilIl processo deve essere suddivisibile in un numero finito di unità indivisibili, chiamate ''transazioni''. L'esecuzione di una transazione perciò deve essere per definizione o totale o nulla, e non sono ammesse esecuzioni parziali; un processo, anche parziale, invece, in quanto insieme di transazioni può non essere elementare.
Nei sistemi di [[DBMS]] le [[transazione (basi di dati)|transazioni]] vengono processate dal [[transaction processing]]. Una [[query]] (ovvero un'interrogazione alla base di dati) ed altre azioni vengono raggruppate in una transazione che deve essere eseguita ''atomicamente'', isolatamente dalle altre e comportando eventualmente una modifica permanente del database. Tale comportamento è assicurato dal
 
* '''Concurrency Control Manager''' o '''WorkSpace Privato''' che garantisce l'atomicità e isolamento
=== Coerenza ===
* '''Logging / Recovery Manager''' che garantisce la durabilità e coerenza.
 
*'''Coerente''': ilIl database rispetta i [[vincolo di integrità|vincoli di integrità]], sia a inizio che a fine transazione. Non devono verificarsi contraddizioni (''incoerenza dei dati'') tra i dati archiviati nel DB;.
 
=== Isolamento ===
 
* '''Isolata''': ogniOgni transazione deve essere eseguita in modo isolato e indipendente dalle altre transazioni, l'eventuale fallimento di una transazione non deve interferire con le altre transazioni in esecuzione;.
 
Sono previsti quattro livelli di isolamento:
# ''' read uncommitted''':
Riga 31 ⟶ 34:
# '''serializable:'''
#: Potrebbe garantire l'effettiva serializzabilità del codice bloccando gli accessi alle tabelle in gioco, tuttavia si tratta di soluzioni troppo inefficienti per essere utilizzate in applicazioni critiche, in realtà la modalità serializzata si limita a evitare i fenomeni esaminati per i livelli più bassi di isolamento.
 
=== Durabilità ===
 
* '''Durevole''': dettaDetta anche '''persistente'''"persistenza", si riferisce al fatto che una volta che una transazione abbia richiesto un ''commit work'', i cambiamenti apportati non dovranno essere più persi. Per evitare che nel lasso di tempo fra il momento in cui la base di dati si impegna a scrivere le modifiche e quello in cui le scrive effettivamente si verifichino perdite di dati dovuti a malfunzionamenti, vengono tenuti dei registri di log dove sono annotate tutte le operazioni sul DB.
 
== Implementazione ==
{{vedi anche|Database management system}}
 
Nei sistemi di [[DBMS]] le [[transazione (basi di dati)|transazioni]] vengono processate dal [[transaction processing]]. Una [[query]] (ovvero un'interrogazione alla base di dati) ed altre azioni vengono raggruppate in una transazione che deve essere eseguita ''atomicamente'', isolatamente dalle altre e comportando eventualmente una modifica permanente del database. Tale comportamento è assicurato dal
* '''Concurrency Control Manager''' o '''WorkSpace Privato''' che garantisce l'atomicità e isolamento
* '''Logging / Recovery Manager''' che garantisce la durabilità e coerenza.
 
=== Concurrency Control Manager o WorkSpace Privato ===
Riga 42 ⟶ 56:
 
=== Logging / Recovery Manager ===
Per assicurare '''persistenza''' dei dati del database anche in caso di crash (p.e. stalli nell'accesso delle transazioni alla risorsa), ogni modifica al database viene registrata separatamente sul disco.
Il log manager registra queste modifiche per consentire in qualsiasi momento (in seguito ad un crash) al recovery manager di ripristinare il database in uno stato coerente.
Il ''log manager'' scrive i suoi dati attraverso il Buffer Manager ma prima di continuare si assicura che siano stati effettivamente scritti su disco. ''Timestamping'' associa ad ogni transazione e ad ogni risorsa una marca temporale con la quale consentire e controllare l'accesso delle transazioni alle risorse del database.