Atomicidad Consistencia Aislamiento Durabilidad (ACID) es un concepto en los sistemas de gestión de bases de datos (DBMS) que identifica un conjunto de propiedades estándar utilizadas para garantizar la confiabilidad de una base de datos determinada.
ACID hace referencia a las cuatro propiedades de transacción de un sistema de base de datos: atomicidad, consistencia, aislamiento y durabilidad. Una transacción es una secuencia de operaciones que satisface estas propiedades.
Las propiedades ACID garantizan que todas las transacciones de la base de datos permanezcan precisas y consistentes, y respaldan la recuperación de fallas que puedan ocurrir durante las operaciones de procesamiento. Se implementa en casi todas las bases de datos relacionales.
Ciberninjas explica la atomicidad, la consistencia, el aislamiento y la durabilidad
Una base de datos garantiza las siguientes cuatro propiedades para asegurar la confiabilidad de la base de datos, como se detalla a continuación:
Atomicidad
La atomicidad es una propiedad que garantiza que una base de datos siga la regla del todo o nada. En otras palabras, la base de datos considera todas las operaciones transaccionales como una unidad completa o un átomo.
Por lo tanto, cuando una base de datos procesa una transacción, esta se completa por completo o no se ejecuta en absoluto. Si falla una sola parte de la transacción, fallará toda la transacción.
Por ejemplo, el usuario A quiere retirar $50 de su cuenta y luego transferirlos a la cuenta del usuario B. Cada transacción (retirar $50 de la cuenta A y transferir $50 a la cuenta B) se contabiliza como independiente.
Si la primera transacción (retirar $50) falla porque (por ejemplo) el servidor falla durante la transacción, el usuario A no puede transferir el dinero al usuario B.
La atomicidad es particularmente importante para mitigar los daños en caso de que se produzcan fallos en el servidor de bases de datos.
Si una base de datos no volátil se bloquea en medio de una transacción, todos los cambios realizados se descartarán o revertirán para evitar enviar resultados parciales a la base de datos de producción.
Consistencia
La coherencia es una propiedad que garantiza que solo se escriban en la base de datos datos válidos que cumplan todas las reglas y restricciones. Cuando una transacción genera datos no válidos, la base de datos vuelve a su estado anterior, que cumple con todas las reglas y restricciones habituales.
La coherencia es fundamental para mantener la integridad de los datos. Se descartan todos los datos incoherentes y se cancelan todas las transacciones que puedan causar una incoherencia y se crea un error o se transcribe en un registro de errores.
Por ejemplo, si el usuario A quiere retirar $1,000 de su cuenta, pero sólo tiene un saldo de $500, la consistencia le impedirá retirar dinero y la transacción será abortada.
Aislamiento
El aislamiento es una propiedad que garantiza la individualidad de cada transacción y evita que se vean afectadas por otras transacciones.
Garantiza que las transacciones se procesen de forma segura e independiente al mismo tiempo sin interferencias, pero no garantiza el orden de las transacciones.
Por ejemplo, el usuario A retira $100 y el usuario B retira $250 de la cuenta del usuario Z, que tiene un saldo de $1000. Como tanto A como B retiran dinero de la cuenta de Z, uno de los usuarios debe esperar hasta que se complete la transacción del otro usuario, evitando así la inconsistencia de los datos.
Si B debe esperar, entonces B debe esperar hasta que se complete la transacción de A y el saldo de la cuenta de Z cambie a $900. Ahora, B puede retirar $250 de este saldo de $900.
Durabilidad
La durabilidad es una propiedad que hace cumplir las transacciones completadas, garantizando que una vez confirmada cada una de ellas permanecerá en el sistema incluso en caso de fallas posteriores.
Si una transacción es exitosa, todos los cambios generados por ella se almacenan de forma permanente.
En el ejemplo anterior, el usuario B puede retirar $100 solo después de que la transacción del usuario A se complete y se actualice en la base de datos.
Si el sistema falla antes de que la transacción de A se registre en la base de datos, A no puede retirar dinero y la cuenta de Z vuelve a su estado consistente anterior.