Введение

Свойство системы баз данных ACID

В системах баз данных, атомность (,/æ//t//ə/'/m//ɪ//s//ə//t//i/; от ἄτομος) является одним из свойств транзакции ACID (Atomicity, Consistency, Isolation, Durability). Атомная транзакция – это неделимая и неразложимая последовательность операций базы данных, в которой либо все операции выполняются, либо ни одна из них не выполняется. Гарантия атомности предотвращает возникновение частичных обновлений базы данных, поскольку они могут привести к более серьезным проблемам, чем отклонение всей последовательности целиком. Как следствие, другая клиентская программа не может наблюдать за ходом выполнения транзакции. В один момент времени она еще не началась, а в следующий – уже завершена полностью (или не началась вовсе, если транзакция была отменена в процессе выполнения). Примером атомной транзакции является денежный перевод с банковского счета А на счет Б. Она состоит из двух операций: снятие средств со счета А и зачисление их на счет Б. Выполнение этих операций в рамках атомной транзакции гарантирует, что база данных останется в согласованном состоянии, то есть деньги не будут потеряны и не будут созданы из ниоткуда, если хотя бы одна из этих двух операций не удастся. Этот же термин используется и в определении первой нормальной формы в системах баз данных, где он относится к концепции, согласно которой значения полей не должны состоять из нескольких меньших значений, подлежащих разделению, например, строка, в которую могут быть упакованы несколько имен, чисел, дат или других типов данных.

Ортогональность

Атомарность не является полностью ортогональной по отношению к другим свойствам ACID транзакций. Например, изоляция опирается на атомарность для отката окружающей транзакции в случае нарушения изоляции, например, взаимной блокировки; согласованность также опирается на атомарность для отката окружающей транзакции в случае нарушения согласованности недопустимой транзакцией. В результате, если нарушение не будет обнаружено и окружающая транзакция не будет откатана, это может привести к сбою изоляции или согласованности.

Реализация

Как правило, системы реализуют атомарность, предоставляя некоторый механизм для индикации начала и завершения транзакций; или сохраняя копию данных перед внесением каких-либо изменений (алгоритм "чтение-копирование-запись"). Ряд файловых систем разработали методы, позволяющие избежать необходимости хранения нескольких копий данных, используя ведение журнала (см. файловые системы с журналированием). Базы данных обычно реализуют это с помощью той или иной формы логирования/журналирования для отслеживания изменений. Система синхронизирует журналы (часто метаданные) по мере необходимости после успешного выполнения изменений. Впоследствии, при восстановлении после сбоя неполные записи игнорируются. Хотя реализации могут различаться в зависимости от таких факторов, как проблемы параллелизма, принцип атомарности – то есть, полное завершение или полный откат – остаётся неизменным. В конечном счёте, любая реализация на уровне приложения опирается на функциональность операционной системы. На уровне файловой системы, POSIX-совместимые системы предоставляют системные вызовы, такие как open(2) и flock(2), позволяющие приложениям атомарно открывать или блокировать файл. На уровне процесса POSIX Threads предоставляют адекватные примитивы синхронизации. На аппаратном уровне требуются атомарные операции, такие как Test and set, Fetch and add, Compare and swap или Load Link/Store Conditional, а также барьеры памяти. Портативные операционные системы не могут просто блокировать прерывания для реализации синхронизации, поскольку аппаратное обеспечение, не поддерживающее параллельное выполнение, такое как гиперпоточность или многопроцессорность, в настоящее время встречается крайне редко.