Вопрос проверяет понимание конкурентного доступа к данным и умение выбирать баланс между корректностью и производительностью.
Уровень изоляции определяет, как транзакции видят изменения друг друга. Чем выше уровень, тем меньше аномалий, но ниже производительность. Существует четыре стандартных уровня. Выбор зависит от требований к точности данных.
Когда несколько транзакций работают одновременно, могут возникать аномалии чтения. Уровни изоляции управляют этим поведением.
Перед разбором уровней важно понять, от чего они защищают:
Dirty Read — чтение неподтверждённых данных
Non-repeatable Read — повторное чтение даёт разные данные
Phantom Read — “появляющиеся” строки
Возможны все аномалии
В PostgreSQL фактически не используется
Пример:
Транзакция видит данные, которые могут быть отменены
Запрещает Dirty Read
Остальные аномалии возможны
Уровень по умолчанию в PostgreSQL
Подходит для:
Большинства веб-приложений
CRUD-операций
Запрещает Dirty и Non-repeatable Read
Phantom Read зависит от реализации
Данные “замораживаются” на время транзакции
Подходит для:
Отчётов
Сложных вычислений
Максимальная изоляция
Поведение как при последовательном выполнении
Подходит для:
Финансовых операций
Критичных бизнес-процессов
Блокировки
Повышенная нагрузка
Возможные откаты транзакций
Чем выше изоляция, тем меньше аномалий, но выше нагрузка. В большинстве случаев достаточно Read Committed, а Serializable нужен только для критичных операций.