ACID — аббревиатура четырёх свойств, которыми должны обладать транзакции в надёжной СУБД. Введён Джимом Греем и Андреасом Ройтером в 1983 году. Все четыре свойства вместе обеспечивают корректность данных даже при сбоях оборудования, ошибках приложений и параллельном доступе многих пользователей.
Четыре свойства ACID
A — Atomicity (Атомарность). Транзакция — неделимая единица: либо все её операции выполняются, либо ни одна. Если транзакция перечисляет деньги (списание + зачисление), при сбое после списания зачисление тоже будет отменено. Реализуется через undo-log (отмена изменений при откате).
C — Consistency (Согласованность). Транзакция переводит базу из одного корректного состояния в другое. Все правила (constraints, foreign keys, check constraints, triggers) соблюдены. Частично ответственность за согласованность лежит на приложении (логические инварианты), частично — на СУБД (декларативные ограничения).
I — Isolation (Изолированность). Параллельные транзакции не мешают друг другу. Стандарт SQL определяет четыре уровня изоляции:
- Read Uncommitted — «грязное чтение» (dirty read) возможно.
- Read Committed — читаются только зафиксированные данные. Проблема non-repeatable read.
- Repeatable Read — повторное чтение в одной транзакции возвращает те же данные. Проблема phantom read.
- Serializable — транзакции выполняются как последовательно. Максимальная безопасность, минимальная производительность.
D — Durability (Долговечность). Зафиксированные транзакции сохраняются навсегда даже при отключении питания. Реализуется через redo-log (Write-Ahead Logging, WAL): изменения записываются в журнал перед применением к данным на диске.
ACID в реальных СУБД
PostgreSQL по умолчанию работает на уровне Read Committed с MVCC — хорошее сочетание производительности и изоляции. MySQL InnoDB — Read Committed или Repeatable Read (по умолчанию). NoSQL СУБД часто жертвуют ACID ради масштабируемости — используют модель BASE (Basically Available, Soft state, Eventually consistent).
История
Концепция транзакций введена Джимом Греем в конце 1970-х. Аббревиатура ACID сформулирована Греем и Ройтером в книге «Transaction Processing: Concepts and Techniques» (1992). WAL-механизм для Durability разработан в IBM IMS в 1970-х. MVCC предложен в System R (IBM, 1976) и развит в PostgreSQL.
На что обращать внимание
При выборе СУБД для критичных приложений (финансы, медицина, e-commerce) ACID — обязательное требование. Репликация Master-Slave сохраняет ACID только на уровне каждого узла — между узлами возможна задержка синхронизации. MongoDB с версии 4.0 (2018) поддерживает multi-document ACID-транзакции — раньше это было только в реляционных СУБД. Redis с модулем RedisJSON и командой MULTI/EXEC — ограниченные ACID-гарантии. ClickHouse не поддерживает полные ACID-транзакции на уровне отдельных строк — предназначен для батч-вставок.
ACID и хостинг
На VPS настройка СУБД влияет на ACID-гарантии: параметр innodb_flush_log_at_trx_commit=1 в MySQL обеспечивает полную Durability (запись в WAL при каждом коммите), значение 2 — быстрее, но теряет последние секунды при отказе питания. Резервное копирование через mysqldump --single-transaction создаёт ACID-консистентный снимок InnoDB без блокировки таблиц.