¿Qué es una transacción?

Una transacción es un grupo de operaciones que tienen las siguientes propiedades: atómicas, coherentes, aisladas y duraderas (ACID). La compatibilidad de transacciones permite desarrollar nuevos tipos de aplicaciones, al tiempo que simplifica el proceso de desarrollo y hace que la aplicación sea más sólida. El resto de este tema proporciona escenarios que muestran la necesidad de estas propiedades y, a continuación, una tabla que define cada propiedad.

En un grupo atómico de operaciones, todas las operaciones del grupo deben realizarse correctamente o los efectos de todos ellos deben deshacerse (también conocidos como revierten). Por ejemplo, una transferencia bancaria debe ser un conjunto atómico de dos operaciones: un débito de una cuenta y un crédito a otra cuenta. El débito y el crédito deben implementarse como un grupo atómico. Si esas dos operaciones no se realizan correctamente, la transferencia es injustamente a favor del banco o del titular de la cuenta.

El requisito de coherencia significa que los datos son coherentes después de la transacción (suponiendo que empezamos con un sistema coherente antes de la transacción). En el ejemplo de transferencia bancaria, la coherencia puede definirse como que el saldo combinado de la cuenta de las dos cuentas sea una constante. Para implementar la coherencia en el ejemplo de transferencia bancaria, las operaciones de débito y crédito simplemente deben ser para la misma cantidad de dinero.

Otro ejemplo de una transacción es una actualización de un sitio web. Un sitio de comercio electrónico requiere que una nueva página de navegación de categoría de producto aparezca exactamente al mismo tiempo que las páginas de detalles del producto que describen los nuevos productos. En este caso, es necesario actualizar y agregar varias entradas de directorio bajo el control de una transacción. No solo es necesario que las actualizaciones sean atómicas, sino que también es necesario que un cliente que está comprando actualmente no vea las actualizaciones en curso. Este es un ejemplo de la propiedad de aislamiento de las transacciones.

La propiedad de durabilidad requiere que después de finalizar una actualización, sus efectos persistan incluso si el sistema deja de responder. En el ejemplo anterior, la durabilidad se puede proporcionar simplemente al garantizar una recuperación de datos adecuada para que todas las nuevas entradas del sistema de archivos que representen la adición de un nuevo producto al sitio aparezcan después de que un sistema deje de responder. Esto requiere un sistema con mecanismos de copia de seguridad, recuperación y alta disponibilidad de datos.

La garantía de la atomicidad de una transacción, así como las demás propiedades, está presente ante cualquier número de errores, incluidos los errores que se producen durante la fase de recuperación de un error anterior. Finalmente, el sistema alcanzará uno de los dos estados: todas las operaciones se han aplicado o ninguna de las operaciones se han aplicado.

Las propiedades de una transacción se resumen en la tabla siguiente.

Término Descripción
Atómica
Todas las operaciones de la transacción se realizan correctamente o ninguna de las operaciones se conservan.
Consistente
Si los datos son coherentes antes de que comience la transacción, serán coherentes una vez finalizada la transacción.
Aislado
Los efectos de una transacción que está en curso están ocultos de todas las demás transacciones.
Durable
Cuando finaliza una transacción, sus resultados son persistentes y sobrevivirán a un bloqueo del sistema.

Estas propiedades garantizan que el software pueda controlar errores inesperados, ya que simplemente puede anular una transacción cuando una situación inesperada impide una finalización correcta. La infraestructura de transacciones garantiza que todos los efectos de la transacción anulada se revierten y devuelvan los datos a un estado coherente. Por lo tanto, un sistema transaccional permite una recuperación correcta de los errores del sistema.

Para garantizar las propiedades ACID, un sistema que admita transacciones debe tener una sólida funcionalidad de registro que se pueda usar para confirmar o revertir transacciones según sea necesario. Para obtener más información, vea Common Log File System.