Атомарность (системы баз данных) - Atomicity (database systems)

В системах баз данных , атомарность ( / ˌ æ т ə м ɪ s ə т я / , от древнегреческого : ἄτομος , латинизируется атомос , лит   «неделимой») является одним из ACID ( атомарность, согласованность , изоляция , долговечность ) свойства транзакции . Атомная транзакция является неделимым и неприводимым рядом операций с базами данных, что либо все происходит, или ничего не происходит. Гарантия атомарности предотвращает частичное обновление базы данных, что может вызвать большие проблемы, чем полный отказ от всей серии. Как следствие, другой клиент базы данных не может наблюдать за выполнением транзакции. В какой-то момент этого еще не произошло, а в следующий уже произошло полностью (или ничего не произошло, если транзакция была отменена в процессе).

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

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

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

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

В результате невозможность обнаружения ошибок и отката включающей транзакции может вызвать сбои изоляции и согласованности.

Выполнение

Обычно системы реализуют атомарность, предоставляя некоторый механизм, указывающий, какие транзакции были запущены, а какие завершены; или сохраняя копию данных до того, как произойдут какие-либо изменения ( чтение-копия-обновление ). Несколько файловых систем разработали методы, позволяющие избежать необходимости хранить несколько копий данных с помощью журналирования (см. Журналирование файловой системы ). Базы данных обычно реализуют это с помощью некоторой формы регистрации / ведения журнала для отслеживания изменений. Система синхронизирует журналы (часто метаданные ) по мере необходимости после того, как изменения были успешно внесены. Впоследствии восстановление после сбоя игнорирует неполные записи. Хотя реализации различаются в зависимости от таких факторов, как проблемы параллелизма, принцип атомарности - т.е. полный успех или полный отказ - остается.

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

Аппаратный уровень требует атомарных операций, таких как Test-and-set , Fetch-and-add , Compare-and-swap или Load-Link / Store-Conditional , вместе с барьерами памяти . Портативные операционные системы не могут просто блокировать прерывания для реализации синхронизации, поскольку оборудование, в котором отсутствует одновременное выполнение, такое как гиперпоточность или многопроцессорность , сейчас встречается крайне редко.

Смотрите также

Рекомендации