Compartir vía


La posibilidad de serializar

Idealmente, las transacciones deben ser serializables. Se dice que las transacciones son serializables si los resultados de las transacciones en ejecución simultáneamente son los mismos que los resultados de ejecutarlas en serie, es decir, una después de la otra. No es importante que la transacción se ejecute primero, solo que el resultado no refleje ninguna combinación de las transacciones.

Por ejemplo, supongamos que la transacción A multiplica los valores de datos por 2 y la transacción B agrega 1 a los valores de datos. Ahora supongamos que hay dos valores de datos: 0 y 10. Si estas transacciones se ejecutan una después de la otra, los nuevos valores serán 1 y 21 si la transacción A se ejecuta primero o 2 y 22 si se ejecuta primero la transacción B. Pero, ¿qué ocurre si el orden en el que se ejecutan las dos transacciones es diferente para cada valor? Si la transacción A se ejecuta primero en el primer valor y la transacción B se ejecuta primero en el segundo valor, los nuevos valores son 1 y 22. Si se invierte este orden, los nuevos valores son 2 y 21. Las transacciones son serializables si 1, 21 y 2, 22 son los únicos resultados posibles. Las transacciones no son serializables si 1, 22 o 2, 21 es un resultado posible.

¿Por qué es deseable la serialización? En otras palabras, ¿por qué es importante que aparezca que una transacción finaliza antes de que se inicie la siguiente transacción? Considere el siguiente problema. Un vendedor está escribiendo pedidos al mismo tiempo que un empleado envía facturas. Supongamos que el vendedor escribe un pedido de la Empresa X, pero no lo confirma; el vendedor sigue hablando con el representante de la Compañía X. El distribuidor solicita una lista de todos los pedidos abiertos y detecta el pedido de la Empresa X y los envía a una factura. Ahora el representante de la Empresa X decide que quieren cambiar su pedido, por lo que el vendedor lo cambia antes de confirmar la transacción. La empresa X obtiene una factura incorrecta.

Si las transacciones del vendedor y del distribuidor fueran serializables, este problema nunca habría ocurrido. La transacción del vendedor habría terminado antes de que se iniciara la transacción del vendedor, en cuyo caso el distribuidor habría enviado la factura correcta, o la transacción del vendedor habría terminado antes de que se iniciara la transacción del vendedor, en cuyo caso el distribuidor no habría enviado una factura a la Empresa X en absoluto.