TGViewer
METANIT.COM METANIT.COM @devnull22 · 5.82K subscribers
Post #2197 1.6K
Продолжение предыдущего поста.
Большинство данных теряются не из-за плохого кода, а из-за плохо организованных транзакций. В частности, мы можем столкнуться со следующими проблемами:

* 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:
- Грязные чтения: предотвращены.
- Неповторяемые чтения: предотвращены.
- Фантомные чтения: предотвращены.
- Искажения: предотвращены.
Telegram METANIT.COM Dirty reads (Грязное чтение / чтение "грязных" данных) — чтение данных, которые ещё не были подтверждены (committed) и могут быть отменены и уровни изоляции (продолжение в следующем посте)
  • ❤ 10
  • 👏 2
  • 🔥 1
More from @devnull22
  1. Mar 19, 2026Добавил в руководство по JavaScript главу про работу с датами и временем с помощью Tempora…
  2. Mar 19, 2026Роскомнадзор перестал полностью справляться с блокировками в интернете Роскомнадзор (РКН)…
  3. Mar 18, 2026Минцифры опубликовало законопроект о государственном регулировании ИИ. Закон должен начать…
  4. Mar 18, 2026Microsoft призвала разработчиков создавать ИИ-приложения в Electron на Windows 11 Microsof…
  5. Mar 18, 2026Oracle анонсировала проект Detroit, который будет развиваться в составе OpenJDK и нацелен…
  6. Mar 17, 2026Вышла новая версия платформы Java - JDK 26. JDK 26 — краткосрочная версия с поддержкой Pre…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →