Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ГАК-2026.docx
Скачиваний:
1
Добавлен:
16.06.2026
Размер:
2.66 Mб
Скачать

Часть 2. Acid

1. Что такое acid?

ACID — это аббревиатура, описывающая требования к транзакционной системе (обычно реляционной БД), которые гарантируют надёжную обработку данных.

Транзакция — это логически неделимая группа операций с базой данных, которая выполняется как единое целое.

Пример транзакции: перевод денег со счёта A на счёт B.

  1. Проверить, что на счёте A достаточно средств.

  2. Уменьшить баланс A на сумму X.

  3. Увеличить баланс B на сумму X.

Если на любом этапе произойдёт сбой, все изменения должны быть отменены, чтобы деньги не "потерялись".

2. Компоненты acid

A — Atomicity (Атомарность)

Транзакция выполняется целиком или не выполняется вообще. Нет частичного выполнения.

Если в середине транзакции происходит сбой (отключение питания, ошибка), все уже сделанные изменения откатываются (rollback). База возвращается в состояние, которое было до начала транзакции.

Пример: При переводе денег если после списания со счёта A, но до зачисления на счёт B упадёт питание, при восстановлении баланс A должен быть восстановлен. Деньги не должны пропасть.

C — Consistency (Согласованность)

Транзакция переводит базу данных из одного согласованного состояния в другое. Нарушение целостности не допускается.

Согласованность означает соблюдение всех правил (constraints), определённых в базе:

  • ограничения первичных и внешних ключей;

  • уникальность значений;

  • проверочные ограничения (CHECK);

  • типы данных;

  • триггеры.

  • Пример: Если есть правило "сумма оценок не может быть отрицательной", транзакция, пытающаяся установить отрицательную оценку, будет отклонена.

  • I — Isolation (Изолированность)

  • Параллельно выполняющиеся транзакции не должны влиять на результат друг друга. Для каждой транзакции должно создаваться впечатление, что она выполняется одна.

  • На практике полная изоляция сильно снижает производительность, поэтому существует несколько уровней изоляции:

Уровень изоляции

"Грязное" чтение

Неповторяющееся чтение

Фантомы

Read Uncommitted

Возможно

Возможно

Возможно

Read Committed

Невозможно

Возможно

Возможно

Repeatable Read

Невозможно

Невозможно

Возможно (в PostgreSQL — нет)

Serializable

Невозможно

Невозможно

Невозможно

Проблемы параллельного доступа:

  • "Грязное" чтение (Dirty Read) — чтение данных, изменённых незавершённой транзакцией (которые могут быть отменены).

  • Неповторяющееся чтение (Non-repeatable Read) — при повторном чтении в рамках одной транзакции данные оказываются изменёнными другой завершённой транзакцией.

  • Фантомы (Phantom Read) — при повторном запросе появляются новые строки, добавленные другой транзакцией.

D — Durability (Долговечность)

После успешного завершения транзакции (COMMIT) все её изменения сохраняются даже в случае последующего сбоя (отключение питания, крах системы).

Реализуется через:

  • журналирование (write-ahead logging) — сначала запись в журнал, потом в данные;

  • резервное копирование;

  • репликацию.