Возможность сериализации

В идеале транзакции должны быть сериализуемыми. Транзакции называются сериализуемыми, если результаты выполняющихся транзакций совпадают с результатами их выполнения последовательно, то есть один за другим. Неважно, какая транзакция выполняется первой, только что результат не отражает никакой смешивания транзакций.

Например, предположим, что транзакция A умножает значения данных на 2, а транзакция б добавляет 1 к значениям данных. Теперь предположим, что существует два значения данных: 0 и 10. Если эти транзакции выполняются один за другим, то новые значения будут иметь значение 1 и 21, если транзакция A выполняется первой, или 2 и 22, если транзакция б выполняется первой. Но что делать, если порядок, в котором выполняются две транзакции, отличается для каждого значения? Если транзакция A сначала выполняется в первом значении, а транзакция б выполняется первой, то новые значения — 1 и 22. Если этот порядок обращен, новые значения будут равны 2 и 21. Транзакции сериализуются, если значения 1, 21 и 2, 22 являются единственными возможными результатами. Транзакции не сериализуются, если возможный результат равен 1, 22 или 2, 21.

Итак, зачем возможности сериализации желательно? Иными словами, почему важно, чтобы одна транзакция была завершена до начала следующей транзакции? Рассмотрим следующую проблему. Salesman Problem вводит заказы в то же время, когда клерк отправляет ведомости. Предположим, что Salesman Problem вводит заказ из компании X, но не фиксирует его. Salesman Problem по-прежнему обобщается с представителями компании X. Клерк запрашивает список всех открытых заказов и находит заказ для компании X и отправляет им счет. Теперь, когда представителя компании X решает, что нужно изменить их порядок, Salesman Problem изменяет его перед фиксацией транзакции. Компания X получает неверный счет.

Если транзакции Salesman Problem и клерка были сериализуемыми, эта проблема никогда не возникала. Транзакция Salesman Problem была завершена до начала транзакции клерка, в этом случае клерк отправил вам правильную ведомость, или транзакция клерка была завершена до начала транзакции Salesman Problem, в этом случае клерк не отправил счет в компанию X.