решал проблему lost update (один поток обновляет баланс, другой - другое поле того же юзера). изменение уровня изоляции транзакции просто создавало deadlock. также serializable в теории блокирует все транзакции, что не оптимально (обработка других юзеров на паузе). самый оптимальный вариант это блокировка рядка. но о дедлоке нигде никто не говорит...
Интересно почему Thread.sleep(2000) нужно ставить изоляцию, а при Thread.sleep(0), то есть если его не ставить, всё работает при любых уровнях изоляции. Это что касается грязного чтения, на остальных не проверял
Потому что тогда первый поток успевает отработать раньше чем второй, т.к. не засыпает. Но если запустить этот код много раз, есть вероятность того что 2-й поток будет отрабатывать раньше.
Такое часто бывает когда транзакция сложная и состоит из нескольких операций. Например первый select читает значение поля, второй использует какие-то функции, например MAX, MIN, COUNT, AVG и т.д.
Спасибо большое, быстро, понятно и с лёгкими примерами, которые можно легко привести на собеседовании
Просто и понятно) Огромное спасибо!!!
Ман это топ, очень понятно и просто
решал проблему lost update (один поток обновляет баланс, другой - другое поле того же юзера). изменение уровня изоляции транзакции просто создавало deadlock. также serializable в теории блокирует все транзакции, что не оптимально (обработка других юзеров на паузе). самый оптимальный вариант это блокировка рядка. но о дедлоке нигде никто не говорит...
Лучший
Ты просто лев! Спасибо сир
спасибо. меня замучали этими тупыми вопросами по уровням изоляции транзакций. А я многопоточно с бд не работаю. Мне retention за глаза хватает
Спасибо за урок
Где еще можно курсы купить кроме UDEMY?
Спасибо! У тебя очень хорошо получается объяснять)
Спасибо!
спасибо за объяснения, очень помогло понять!
для демонстрации чтения грязных данных в main не нужно устанавливать уровень изоляции транзакции. достаточно установить его в OtherTransaction
Разве в MySql не Repeteable Read по умолчанию?
Connection. Rollback разве не savepoint?
Некоторые проблемы проблематично даже исскуственно сделать, хотя от этого только хуже.
Вроде в MS sql теперь всегда по умолчания serialazable, они убрали эту функциональность нет?
короч я так понял, что чтоб починить - надо все самому вручную сломать)))
Интересно почему Thread.sleep(2000) нужно ставить изоляцию, а при Thread.sleep(0), то есть если его не ставить, всё работает при любых уровнях изоляции. Это что касается грязного чтения, на остальных не проверял
Потому что тогда первый поток успевает отработать раньше чем второй, т.к. не засыпает. Но если запустить этот код много раз, есть вероятность того что 2-й поток будет отрабатывать раньше.
Когда приходится читать два раза из базы в одной транзакции? Где и кто такой способ используется?
сам факт, что допускается такой дефект
Такое часто бывает когда транзакция сложная и состоит из нескольких операций. Например первый select читает значение поля, второй использует какие-то функции, например MAX, MIN, COUNT, AVG и т.д.
То есть судя по словам автора единственная причина знать уровни изоляции это то что их спрашивают на собеседовании, ну такой себе аргумент