ACID es un acrónimo que describe cuatro propiedades clave que una transacción de base de datos debe poseer para garantizar la fiabilidad: Atomicity (Atomicidad), Consistency (Consistencia), Isolation (Aislamiento) y Durability (Durabilidad). Atomicity asegura que una transacción se completa en su totalidad o no se completa en absoluto; no hay estados intermedios. Consistency garantiza que una transacción lleva la base de datos de un estado válido a otro, manteniendo todas las reglas y restricciones predefinidas. Isolation asegura que la ejecución concurrente de transacciones produce el mismo resultado que si se ejecutaran secuencialmente, evitando interferencias entre ellas. Durability garantiza que una vez que una transacción ha sido confirmada (committed), sus cambios persisten permanentemente, incluso en caso de fallos del sistema.
Las propiedades ACID son fundamentales en la mayoría de los sistemas de gestión de bases de datos relacionales (RDBMS) tradicionales. Ejemplos concretos incluyen PostgreSQL, MySQL, Oracle Database y Microsoft SQL Server, donde se implementan mediante mecanismos como journaling, write-ahead logging (WAL), bloqueos (locks), multi-version concurrency control (MVCC) y puntos de control (checkpoints). En el ámbito de las bases de datos distribuidas, sistemas como CockroachDB y YugabyteDB también ofrecen transacciones ACID distribuidas, a menudo utilizando algoritmos de consenso como Raft o Paxos para garantizar la atomicidad y durabilidad a través de múltiples nodos.
Para un Arquitecto de Sistemas, comprender ACID es crucial para diseñar sistemas que requieran alta integridad de datos. La elección de un sistema que soporte ACID implica un trade-off: se gana en fiabilidad y predictibilidad, pero a menudo se sacrifica escalabilidad horizontal y disponibilidad en entornos distribuidos (ver teorema CAP). Los arquitectos deben evaluar si las garantías ACID son estrictamente necesarias para un caso de uso particular (ej. transacciones financieras) o si un modelo BASE (Basically Available, Soft state, Eventually consistent) es aceptable, lo que podría ofrecer mayor rendimiento y escalabilidad. Decidir cuándo y dónde aplicar ACID es una decisión estratégica que impacta directamente la complejidad, el rendimiento y la resiliencia del sistema.