Что означает аббревиатура ACID?
- Какие гарантии даёт транзакция?
- Что означает каждая буква в ACID?
ACID — гарантии транзакции: атомарность (всё или ничего), согласованность (инварианты не нарушаются), изоляция (параллельные транзакции не мешают друг другу), долговечность (подтверждённое переживёт сбой).
- Атомарность и долговечность обеспечивает журнал предзаписи (WAL)
- Изоляция — уровнями изоляции и MVCC; полная изоляция дорогая, поэтому по умолчанию ослаблена
- Согласованность — ограничения (FK, CHECK, UNIQUE) плюс правильная логика приложения
А ещё Пример — перевод денег: списание и зачисление вместе или никак
Подробно
Атомарность — транзакция выполняется целиком или не выполняется вовсе. Если в переводе денег списание прошло, а зачисление упало, база откатывает и списание. Обеспечивается журналом: при сбое незавершённые транзакции отбрасываются.
Согласованность (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?
Разбор темы
- Транзакции, изоляция и блокировки
ACID по буквам, аномалии чтения, уровни изоляции, MVCC и оптимистичные/пессимистичные блокировки.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.