Serializability vs Linearizability Этим понедельничным деньком настало время разобраться между двумя очень похожими терминами🤓 💋Есть 2 счета с денюжками: A=30 и В=70, Тотал=100. Они не могут в тотале уйти в минус. Две параллельные транзакции пытаются снять по 100 Что происходит в несериализуемой, сериализуемой и линеаризуемой системах? 1️⃣Несериализуемая 1: снимает 100 с А 2: снимает 100 с В Баланс: А=-70, В=-30, Тотал=-100 Возникла аномалия, мы нарушили правило банка 2️⃣Сериализуемая 1: снимает 100 с А и пытается закоммитить 2: снимает 100 с В и пытается закоммитить БД сравнивает результат, как если бы они выполнялись последовательно. Если закоммитить сначала первую транзакцию, то состояние будет А=-70, В=70, Тотал=0. Вторая не может снять, потому что в тотале 0, она откатывается. Можем вместо первой закоммитить вторую, таймлайн не важен 3️⃣Линеаризуемая 1: снимает 100 с А, текущее состояние А=-70, В=70, Тотал=0 2: уже видит, что в тотале 0, и даже не пытается А вот здесь уже важно, какая транзакция началась раньше 〰️〰️〰️ Надеюсь, вам стало чуточку понятнее)