😐 Уровни изоляции транзакций и аномалии
Когда несколько транзакций работают одновременно, они могут мешать друг другу и создавать странные эффекты — аномалии.
Чтобы держать порядок, базы данных вводят уровни изоляции — насколько сильно транзакции изолированы друг от друга.
⸻
⚠️ Типичные аномалии
— Dirty Read (грязное чтение) — читаешь данные, которые ещё не закоммичены.
Если транзакция откатится — ты прочитал “призрак”.
— Non-repeatable Read (неповторяемое чтение) — читаешь одну и ту же строку дважды, а результат разный, потому что другая транзакция изменила её между запросами.
— Phantom Read (фантомное чтение) — при повторном запросе появляются новые строки, подходящие под условие, которых раньше не было.
⸻
🔒 Уровни изоляции
1) READ UNCOMMITTED — можно читать даже незакоммиченные данные. Самый быстрый и самый опасный.
2) READ COMMITTED — читаешь только закоммиченные данные.
Нет грязных чтений, но возможны неповторяемые и фантомные.
(По умолчанию в PostgreSQL)
3) REPEATABLE READ — при повторном чтении данные не меняются.
Нет грязных и неповторяемых чтений, но фантомы возможны.
4) SERIALIZABLE — максимальная изоляция, всё выглядит как последовательное выполнение. Полностью без аномалий, но возможны откаты при конфликтах
💡 Чем выше уровень изоляции — тем меньше аномалий, но ниже производительность
🚀 Пост Guru Node.js: @DemetraIT
Post #436
215
- ❤ 2
- 🔥 2
- 🐳 1