ACID в базах данных

В информатике ACID (atomicity, consistency, isolation, durability - атомарность, согласованность, изоляция, долговечность) - это набор свойств транзакций базы данных, предназначенный для гарантии достоверности данных, несмотря на ошибки, сбои питания и другие неполадки. В контексте баз данных последовательность операций с базой данных, удовлетворяющая свойствам ACID (которые могут восприниматься как единственная логическая операция над данными), называется транзакцией. Например, перевод средств с одного банковского счета на другой, даже если он включает в себя несколько изменений, таких как дебетование одного счета и зачисление другого, является одной транзакцией.

В 1983 году Андреас Рейтер и Тео Хердер придумали аббревиатуру ACID, основываясь на более ранней работе Джима Грея, который при характеристике концепции транзакции назвал атомарность, согласованность и долговечность, но не изоляцию. Эти четыре свойства являются основными гарантиями парадигмы транзакций, которая повлияла на многие аспекты разработки систем баз данных.

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

Транзакции часто состоят из нескольких операторов. Атомарность гарантирует, что каждая транзакция рассматривается как единая "единица", которая либо полностью завершается успешно, либо полностью терпит неудачу: если какой-либо из операторов, составляющих транзакцию, не может быть завершен, вся транзакция завершается неудачно, а база данных остается неизменной. Атомарная система должна гарантировать атомарность в каждой ситуации, включая сбои питания, ошибки и программные сбои. Гарантия атомарности предотвращает частичное обновление базы данных, что может вызвать более серьезные проблемы, чем полный отказ от всей серии. Как следствие, другой клиент базы данных не может наблюдать за выполнением транзакции. В какой-то момент этого еще не произошло, а в следующий уже произошло полностью (или ничего не произошло, если транзакция была отменена в процессе).

Примером атомарной транзакции является денежный перевод с банковского счета A на счет B. Он состоит из двух операций: снятия денег со счета A и сохранения их на счет B. Выполнение этих операций в атомарной транзакции гарантирует, что база данных останется в согласованном состоянии, то есть деньги не списываются и не зачисляются, если одна из этих двух операций не удалась.

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

Согласованность гарантирует, что транзакция может только перевести базу данных из одного допустимого состояния в другое, поддерживая инварианты базы данных: любые данные, записанные в базу данных, должны быть действительными в соответствии со всеми определенными правилами, включая ограничения, каскады, триггеры и любую их комбинацию. Это предотвращает повреждение базы данных в результате незаконной транзакции, но не гарантирует правильность транзакции. Ссылочная целостность гарантирует связь первичный ключ - внешний ключ.

Изоляция (Isolation)

Транзакции часто выполняются одновременно (например, несколько транзакций читают и записывают в таблицу одновременно). Изоляция гарантирует, что одновременное выполнение транзакций оставляет базу данных в том же состоянии, которое было бы получено, если бы транзакции выполнялись последовательно. Изоляция - основная цель контроля конкурентности; в зависимости от используемого метода последствия незавершенной транзакции могут быть даже не видны другим транзакциям.

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

Долговечность гарантирует, что после того, как транзакция была зафиксирована, она останется совершенной даже в случае сбоя системы (например, отключения электроэнергии или обрушения системы). Обычно это означает, что завершенные транзакции (или их эффекты) записываются в энергонезависимую память.


Читайте также:

Комментарии

Популярные сообщения из этого блога

Язык поисковых запросов в Graylog

Хэш-таблица: разрешение коллизий

Нормальные формы, пример нормализации в базе данных