🔵 Уровни изоляции транзакций в базах данных
Уровни изоляции в БД управляют тем, как изменения одной транзакции видны другим транзакциям
💙помогают избежать конфликтов и ошибок, когда много пользователей работают с БД одновременно
💙позволяют балансировать между производительностью системы и целостностью данных
Изоляция является одним из ключевых компонентов ACID
Напомним, транзакция в БД — последовательность операций, выполняемых как единое целое.
Должны быть либо полностью выполнены, либо полностью отменены.
Это обеспечивает целостность данных.
Где применяются уровни изоляции
💙в реляционных базах данных (MySQL, PostgreSQL, Oracle и SQL Server)
💙в системах с высоким количеством параллельных транзакций (финансовые, интернет-магазины, системы бронирования)
Основные механизмы
В основном реализуется через механизмы СУБД:
➖Блокировки: предотвращают одновременное чтение и запись одних и тех же данных
➖MVCC: версионирование данных для каждой транзакции
Иные:
➖Паттерны проектирования: например, очереди задач
➖Транзакционные менеджеры: внешние компоненты в распределенных системах
Аномалии при параллельной обработке транзакций
🔘Потерянное обновление: две транзакции одновременно изменяют одни и те же данные, и одно из изменений теряется
0️⃣«Грязное» чтение: транзакция читает данные, которые были изменены другой транзакцией, но еще не зафиксированы
0️⃣Неповторяемое чтение: транзакция повторно читает данные и видит разные значения из-за изменений, внесенных другой транзакцией
0️⃣Фантомная запись: транзакция повторно выполняет запрос и видит новые строки, добавленные другой транзакцией
Уровни изоляции
💙 Read Uncommitted (Чтение неподтвержденных данных)
Самый низкий уровень изоляции: транзакции могут читать изменения, которые не были зафиксированы другими транзакциями.
Механизм: отсутствие блокировок на чтение и запись
💙Подходит для аналитических запросов, где требуется высокая скорость чтения данных
💙 Пример: логирование или мониторинг, где важна скорость, а не точность данных
➖Возможны все проблемы: "грязное" чтение, повторное обновление, неповторяемое чтение, фантомные записи
💙 Read Committed (Чтение подтвержденных данных)
Транзакции могут читать только те изменения, которые были зафиксированы
Механизм: блокировка строк на запись до завершения транзакции
💙Когда важна балансировка между целостностью данных и производительностью
💙 Система интернет-магазина: заказы читаются только после их подтверждения
💙 Большинство OLTP систем
➕избегается "грязное" чтение и повторное обновление
➖неповторяемое чтение и фантомные записи
💙 Repeatable Read (Повторяемое чтение)
Транзакция A читает данные, они блокируются для изменения другими транзакциями.
Транзакция B не может изменять эти данные, пока транзакция A не завершится, но может добавлять новые строки.
Транзакция A повторно читает те же данные, но не видит новых строк.
Механизм: блокировка всех прочитанных строк до завершения транзакции
💙Когда критично избегать несогласованность данных
💙 Финансовая система: состояние счета должно быть неизменным на протяжении всей транзакции
➕избегаются "грязное" чтение, неповторяемое чтение, повторное обновление
➖фантомные записи
💙 Serializable (Сериализуемость)
Обеспечивает полную изоляцию транзакций, делая их последовательными, как если бы они выполнялись по очереди.
Механизм: блокировка на чтение и запись
💙Когда есть высокие требованиями к целостности данных, а параллельные транзакции могут привести к конфликтам
💙 Банковская система: одновременные транзакции по переводу средств должны быть строго упорядочены
➕ Избегаются все аномалии
Как выбрать уровень изоляции
➖Требования: какие аномалии допустимы
➖Регулирование: законодательные и отраслевые стандарты
➖Тестирование: для оценки консистентности данных и нагрузки на систему
Чем выше уровень изоляции, тем:
💙больше шансов блокировки транзакций
💙выше целостность данных
💙меньше ошибок из-за параллельных транзакций
💙меньше производительность системы
#бд
Post #446
15K
- 👍 38
- 🔥 11
- ❤ 8
- 💩 1