Содержание

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 - Надёжность

После завершения транзакции всё сохранится

Транзакция завершена - круто