ACID

Da Wikipedia, l'enciclopedia libera.
bussola Disambiguazione – Se stai cercando la pagina di test per i browser web, vedi Acid1, Acid2 o Acid3.

Nell'ambito dei database, ACID deriva dall'acronimo inglese Atomicity, Consistency, Isolation, e Durability (Atomicità, Consistenza, Isolamento e Durabilità) ed indica le proprietà logiche che devono avere le transazioni.

Perché le transazioni operino in modo corretto sui dati è necessario che i meccanismi che le implementano soddisfino queste quattro proprietà:

  • atomicità: la transazione è indivisibile nella sua esecuzione e la sua esecuzione deve essere o totale o nulla, non sono ammesse esecuzioni parziali;
  • consistenza: quando inizia una transazione il database si trova in uno stato consistente e quando la transazione termina il database deve essere in un altro stato consistente, ovvero non deve violare eventuali vincoli di integrità, quindi non devono verificarsi contraddizioni (inconsistenza) tra i dati archiviati nel DB;
  • isolamento: 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;
  • durabilità: 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 li scrive effettivamente si verifichino perdite di dati dovuti a malfunzionamenti, vengono tenuti dei registri di log dove sono annotate tutte le operazioni sul DB.

Nei sistemi di DBMS le 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.

Isolamento[modifica | modifica wikitesto]

Sono previsti quattro livelli di isolamento:

  1. read uncommitted:
    • consente transazioni in sola lettura, senza bloccare in lettura i dati
    • una transazione può leggere dati sporchi, perché potrebbero sparire se la transazione che li ha generati abortisce
    Esempi:
    T1 aggiorna una riga r1
    * T2 accede a r1
    * T1 termina con un rollback
    * T2 ha avuto accesso ad un dato che non è mai esistito
  2. read committed:
    • prevede il rilascio immediato dei dati in lettura, ritardando quelli in scrittura
    • letture non ripetibili all'interno della stessa transazione
  3. repeatable read:
    • vengono bloccati sia i dati in lettura che quelli in scrittura ma solo sulle ennuple della tabella coinvolte
    • genera il fenomeno dei fantasmi (phantoms)
  4. serializable:
    Potrebbe garantitire 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 fenomi esaminati per i livelli più bassi di isolamento

Concurrency Control Manager o WorkSpace Privato[modifica | modifica wikitesto]

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). Tipicamente questo risultato viene ottenuto attraverso la gestione di lock memorizzati 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.

Logging / Recovery Manager[modifica | modifica wikitesto]

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 consistente. 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[modifica | modifica wikitesto]

  • (EN) ACID (Atomicity, Consistency, Isolation, and Durability.) in Dictionary of E-Business, Hoboken, Wiley, 2003.
  • (EN) ACID (Atomicity, Consistency, Isolation, and Durability) in Dictionary of Multimedia and Internet Applications: A Guide for Developers and Users, Hoboken, Wiley, 1999.
informatica Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica