ACID: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Fix vari. Rivista struttura della voce in preparazione a interventi successivi.
Riga 38:
 
Detta anche "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 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 ===
La transazione effettua le modifiche su una copia della risorsa database. Se essa non termina con successo la copia viene distrutta, altrimenti le modifiche fatte sulla copia vengono rese permanenti attraverso l'operazione di commit. Il sistema ne garantisce in questo modo l'''atomicità''.
Le transazioni devono essere eseguite in isolamento le une dalle altre ma spesso molte transazioni vengono eseguite concorrentemente nello stesso sistema. Il concurrency control manager si assicura che le singole azioni delle varie transazioni vengano eseguite in un ordine tale da non interferire le une con le altre (''isolamento'').
Il Concurrency Control Manager viene realizzato tramite due istruzioni primitive:
* '''lock''', istruzione tramite la quale si afferma che una risorsa è bloccata da una determinata transazione;
* '''unlock''', istruzione tramite la quale si afferma che una risorsa è stata liberata da una determinata transazione.
La serie dei lock viene memorizzata nella lock table (sezione del DBMS apposita). Il concurrency control manager ha anche il compito di risolvere i [[deadlock]] causati dai lock facendo abortire una o più transazioni.
Per prevenire i lock e gestire al meglio le transazioni si introduce il concetto di scheduler. Lo scheduler ha il compito di garantire l'isolamento, accogliere una transazione ed assegnarle un identificatore unico, chiedere al buffer manager del DBMS di leggere/scrivere sul database secondo una particolare sequenza.
 
=== 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.
 
== Bibliografia ==