Получить доступ

Что означает аббревиатура ACID?

JuniorТранзакции и изоляцияSQL
Ещё спрашивают так:
  • Какие гарантии даёт транзакция?
  • Что означает каждая буква в ACID?
Коротко

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

  • Атомарность и долговечность обеспечивает журнал предзаписи (WAL)
  • Изоляция — уровнями изоляции и MVCC; полная изоляция дорогая, поэтому по умолчанию ослаблена
  • Согласованность — ограничения (FK, CHECK, UNIQUE) плюс правильная логика приложения

А ещё Пример — перевод денег: списание и зачисление вместе или никак

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Атомарность — транзакция выполняется целиком или не выполняется вовсе. Если в переводе денег списание прошло, а зачисление упало, база откатывает и списание. Обеспечивается журналом: при сбое незавершённые транзакции отбрасываются.

Согласованность (consistency) — транзакция переводит базу из одного корректного состояния в другое: не нарушаются ограничения (внешние ключи, уникальность, CHECK) и бизнес-инварианты. База проверяет объявленные ограничения, а остальные инварианты — ответственность приложения.

Изоляция — параллельные транзакции не видят промежуточных состояний друг друга. Полная изоляция (Serializable) — как будто транзакции шли по очереди. Она дорога, поэтому базы по умолчанию используют более слабые уровни (Read Committed в PostgreSQL, Repeatable Read в MySQL) и допускают часть аномалий.

Долговечность — после подтверждения коммита изменения не пропадут даже при отключении питания: запись в журнале сбрасывается на диск (fsync) до ответа клиенту.

Где ACID ослабляют сознательно: synchronous_commit = off (быстрее, риск потерять последние транзакции), асинхронные реплики, многие NoSQL-базы с атомарностью только в пределах одного документа.

Пример

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;   -- обе строки изменятся вместе; при ошибке — ROLLBACK и ни одна

Что хотят услышать

  • Расшифровка и смысл каждой буквы.
  • Пример с переводом денег.
  • Чем обеспечиваются: журнал, блокировки или MVCC, ограничения.
  • Что изоляция по умолчанию неполная — плюс.

Частые ошибки

  • Путать C из ACID с C из CAP.
  • Считать, что согласованность целиком обеспечивает база.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Atomicity, Consistency, Isolation, Durability
  • ✗Availability, Consistency, Integrity, Durability
  • ✗Atomicity, Concurrency, Isolation, Distribution
  • ✗Accuracy, Consistency, Isolation, Persistence

Что спросят дальше

  • Какие бывают уровни изоляции?
  • Чем ACID отличается от BASE?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем