Продолжение
предыдущего поста.
Большинство данных теряются не из-за плохого кода, а из-за плохо организованных транзакций. В частности, мы можем столкнуться со следующими проблемами:
*
Dirty reads (Грязное чтение / чтение "грязных" данных) — чтение данных, которые ещё не были подтверждены (committed) и могут быть отменены.
*
Non-repeatable reads (Неповторяемое чтение) — ситуация, когда при повторном чтении данных в рамках одной транзакции получаются разные результаты.
*
Phantom reads (Фантомное чтение) — появление новых записей при повторном выполнении запроса в рамках одной транзакции.
*
Write skew (Искажения) — две транзакции читают перекрывающиеся данные, одновременно производят обновление, а затем фиксируют изменения.
Для управления транзакциями есть следующие
уровни изоляции:*
Read Uncommitted — самый быстрый уровень, допускающий все виды несогласованного чтения.
*
Read Committed — гарантирует, что читаются только подтверждённые данные, но допускает неповторяемые чтения.
*
Repeatable Read — обеспечивает повторяемость чтений, согласованность, но не защищает от фантомных чтений.
*
Serializable — самый строгий уровень, гарантирующий полную изоляцию транзакций, но требующий значительных ресурсов.
Например, рассмотрим, как происходят
грязные чтения (Dirty Reads) (наглядно на картинке из
предыдущего поста):
1.
Клиент A начинает транзакцию и выбирает баланс клиента 1, который изначально равен $1,000.
2.
Клиент B начинает свою транзакцию и обновляет баланс клиента 1 до $1,200.
3.
Клиент A продолжает свою транзакцию, читая баланс клиента 1, и видит значение $1,200, хотя транзакция
Клиента B еще не завершена.
4.
Клиент B откатывает свою транзакцию, возвращая баланс клиента 1 к исходному значению $1,000.
5.
Клиент A завершает свою транзакцию, используя некорректное значение $1,200, что приводит к "грязному чтению".
### Уровни изоляции и их влияние:
-
Read Uncommitted:
- Грязные чтения: возможны.
- Неповторяемые чтения: возможны.
- Фантомные чтения: возможны.
- Искажения: возможны.
-
Read Committed:
- Грязные чтения: предотвращены.
- Неповторяемые чтения: возможны.
- Фантомные чтения: возможны.
- Искажения: возможны.
-
Repeatable Read:
- Грязные чтения: предотвращены.
- Неповторяемые чтения: предотвращены.
- Фантомные чтения: возможны.
- Искажения: возможны.
-
Serializable:
- Грязные чтения: предотвращены.
- Неповторяемые чтения: предотвращены.
- Фантомные чтения: предотвращены.
- Искажения: предотвращены.