ACID (Atomicity, Consistency, Isolation, Durability)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 16:08, 14 января 2019.

ACID (Атомарность, Согласованность, Изолированность, Долговечность) - является аббревиатурой для изучения и запоминания четырех основных атрибутов, обеспечиваемых любой транзакцией, менеджером транзакций.[Источник 1]

Атомарность

Во-первых, транзакция должна быть атомарной (или все-или-ничего), что означает, что она выполняется полностью или не выполняется вообще. Не должно быть никакой возможности, что выполняется только часть программы транзакций.

Например, предположим, что у нас есть Программа транзакций, которая перемещает 100 долларов США из учетной записи A в учетную запись B. Она берет 100 долларов США из учетной записи A и добавляет ее к учетной записи B. Когда она выполняется как транзакция, она должна быть атомарной - либо выполняются оба, либо ни одно из обновлений. для него невозможно выполнить одно из обновлений, а не другое.

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

Используя свойство атомарности у, мы можем написать программу транзакций, которая эмулирует атомарную бизнес-транзакцию, такую ​​как снятие с банковского счета, резервирование рейса или продажа акций. Каждое из этих бизнес-действий требует обновления нескольких элементов данных. Реализуя бизнес-действие с помощью транзакции, мы гарантируем, что все обновления выполнены или нет. Кроме того, атомарность обеспечивает возвращение базы данных в известное состояние после сбоя, что снижает потребность в ручном вмешательстве при перезапуске. Успешное завершение транзакции называется фиксацией. Сбой транзакции называется прерыванием.

Согласованность

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

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

  • Все значения первичного ключа являются уникальными (например, нет двух записей о сотрудниках с одинаковым номером сотрудника).
  • База данных обладает ссылочной целостностью, что означает, что в нее записываются только те ссылочные объекты, которые существуют (например, запись детали и запись клиента, на которые ссылается запись заказа, действительно существуют).
  • Некоторые предикаты сохраняются (например, сумма расходов в каждом отделе меньше или равна бюджету отдела).

Хорошая практика программирования - обеспечение того, чтобы транзакции поддерживали согласованность базы данных. Однако, в отличие от атомарности, изоляции и долговечности, согласованность является ответственностью, которую разделяют программы транзакций и система TP, которая выполняет эти программы. Таким образом, система TP гарантирует, что набор транзакций является атомарным, изолированным и долговечным, независимо от того, запрограммированы они или нет для сохранения согласованности. Таким образом, строго говоря, тест ACID для транзакционных систем является слишком сильным, потому что система TP выполняет свою часть для C, только гарантируя AID. Ответственность за обеспечение согласованности программы транзакций лежит на прикладном программисте.

Изолированность

Третье свойство транзакции - это изоляция. Мы говорим, что набор транзакций изолирован, если эффект запускающей их системы такой же, как если бы он запускал их по одной за раз. Техническое определение изоляции - сериализуемость. Выполнение является сериализуемым (то есть изолированным), если его эффект такой же, как и последовательное выполнение транзакций, одна за другой, последовательно, без перекрытия при выполнении любых двух из них. Это имеет тот же эффект, что и запуск транзакций по одной. Классическим примером неизолированного исполнения является банковская система, где каждая из двух транзакций пытается вывести последние 100 долларов на счет. Если обе транзакции считывают баланс счета до того, как какая-либо из них обновит его, то обе транзакции определят, что денег достаточно для удовлетворения их запросов, и обе из них заберут последние 100 долларов. Понятно, что это неправильный результат. Более того, это не сериализуемый результат. При последовательном выполнении только первая транзакция сможет снять последние 100 долларов. Второй найдет пустой аккаунт.

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

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

База данных обычно устанавливает блокировки данных, к которым обращается каждая транзакция. Эффект от размещения блокировок состоит в том, что выполнение кажется последовательным. Фактически, внутренне, система выполняет транзакции параллельно, но благодаря этому механизму блокировки система создает иллюзию того, что транзакции выполняются последовательно, одна за другой.

Долговечность

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

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

Свойство долговечности обычно получается с помощью механизма, который начинается с того, что система TP записывает копию всех обновлений транзакции в файл журнала во время работы программы транзакции. Когда программа транзакции выдает операцию фиксации, система сначала гарантирует, что все записи, записанные в файл журнала, находятся на диске, а затем возвращается в программу транзакции, указывая, что транзакция действительно зафиксирована и что результаты являются надежными. Обновления могут быть записаны в базу данных сразу, или они могут быть написаны чуть позже. Однако если происходит сбой системы после фиксации транзакции и до того, как обновления поступают в базу данных, то после восстановления системы после сбоя она должна восстановить базу данных. Для этого он перечитывает журнал и проверяет, что каждое обновление в результате зафиксированной транзакции действительно вносится в базу данных. Если нет, то оно применяет обновление к базе данных. Когда эта операция восстановления завершена, система возобновляет нормальную работу. Таким образом, любая новая транзакция будет считывать состояние базы данных, которое включает в себя все зафиксированные обновления.[Источник 2]

Источник

  1. What is ACID (atomicity, consistency, isolation, and durability)? // TechTarget [2005-2019]. Дата обновления: 07.2016. URL:https://searchsqlserver.techtarget.com/definition/ACID (дата обращения: 05.01.2019)
  2. scribd.com [Электронный ресурс]: Principles of Transaction Processing for the Systems Professional (Philip A. Bernstein, Eric Newcomer) Morgan Kaufmann Publishers, Inc. San Francisco, California ©2009 Режим доступа: http://bookre.org/reader?file=490665 (дата обращения: 5.01.2019)

Ссылки