hostprofi.ru
Подобрать хостинг
Термин·буква A

ACID

краткое определение

ACID — набор свойств транзакций в реляционных СУБД: Atomicity (атомарность), Consistency (согласованность), Isolation (изолированность), Durability (долговечность). Гарантирует корректность данных при сбоях, параллельном доступе и частичных отказах.

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 без блокировки таблиц.

Другие термины