Недостаточная изолированность¶
Изолированность (isolation в аббревиатуре ACID) гарантирует, что результат параллельного выполнения нескольких ACID транзакций будет таким же, как при некоем последовательном выполнении. База Данных дает иллюзию того, что каждая ACID транзакция имеет эксклюзивный доступ к информации.
В случае с повествованиями мы имеем дело с ситуацией, когда каждая локальная транзакция сразу же фиксируется и обновления становятся доступными другим повествованиям, следовательно, либо их могут изменить другие повествования до окончания текущего, либо другие повествования смогут их прочитать.
Нехватка изолированности может вызывать аномалии — ситуации, когда параллельное выполнение транзакций даёт иные результаты, чем последовательное. Для борьбы с аномалиями применяют стратегии проектирования повествований, называемые контрмерами.
Аномалии¶
- Потеря обновлений — одно повествование перезаписывает изменения, внесенные другим, не читая их при этом;
- “Грязное” чтение — транзакция или повествование читают незавершенные обновления другого повествования;
- Нечеткое чтение — два разных типа повествования читают одни и те же данные,но получают разные результаты, потому что другое повествование внесло изменения.
Контрмеры¶
- Семантическая блокировка — блокировка на уровне приложения;
- Коммутативные обновления — проектирование операций обновления так, чтобы их можно было выполнить в любом порядке;
- Пессимистическое представление — перестановка этапов повествования для минимизации бизнес-рисков;
- Повторное чтение значения — предотвращение грязного чтения путём повторного чтения данных, чтобы убедиться в их неизменности перед перезаписью;
- Файл версий — ведение записей об обновлениях, чтобы их можно было менять местами;
- По значению — использование бизнес-рисков каждого запроса для динамического выбора механизма конкурентности.
Полезно иметь в виду структуру повествования.
Дата создания : 26 июля 2022 г.