ACID - набор требований, которые обеспечивают сохранность данных
Требования ACID для сохранности данных
Atomicity - Атомарность, Непрерывность
Операция будет выполнена целиком или никак
Транзакции
Consistency - Согласованность
Финальное состояние не будет нарушать правила консистентности
Ключи, уникальность, Констреинт
Транзакция не допускает промежуточных результатов - база остаётся консистентной
Isolition - Изолированность
Транзакции не мешаются друг другу
Проблема
Грязное чтение
Пока транзакция выполнялась 2й кассир считал промежуточные данные
Потерянная запись
2 кассира совершают операцию
1 кассир снимает даньги в транзакции
2 кассир кладёт деньги пока транзакция 1го не завершилась и получает ответ что на счёте ещё есть деньги снятые 1м кассиром
Повторимое чтение
Пока 1 кассир строит отчет 2й меняет данные в БД
В итоге отчёт построен на разных данных
Фантомы
Пока 1 кассир строит отчет 2й добавляет/удаляет данные в БД
В итоге отчёт построен на разных данных
Решение
Блокировки - заблокировать данные на редактирование/чтение или всю таблицу на время выполнения операции
Версии - при каждом обновлении создаём версии. Пока транзакция выполняется и создаёт новую версию - остальные читают данные из прошлой версии
-
Read uncommited
-
Read commited
-
Repetable read
-
Serializabl
Durability - Надёжность
После завершения транзакции всё сохранится
Если пользователь получил подтверждение от системы, что транзакция выполнена, он может быть уверен, что сделанные им изменения не будут отменены из-за какого-либо сбоя. Для этого часто используют
журналирование изменений (write ahead log,WAL)
ACID
- Atomicity - Атомарность, Непрерывность
Целиком или никак
Транзакции,
- Consistency - Согласованность
Финальное состояние не будет нарушать правила консистентности
Ключи, уникальность
- Isolition - Изолированность
Операции не мешаются
Транзакций
- Durability - Надёжность
После завершения транзакции всё сохранится
Транзакция завершена - круто