Транзакция базы данных - Database transaction

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

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

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

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

Цель

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

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

  1. Списать 100 долларов США на счет расходов на продукты
  2. Зачислить 100 долларов на текущий счет

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

Транзакционные базы данных

А транзакционная база данных это СУБД что обеспечивает КИСЛОТНЫЕ свойства для заключенного в скобки набора операций с базой данных (начало-фиксация). Все операции записи в транзакции имеют эффект «все или ничего», то есть либо транзакция завершается успешно и все записи вступают в силу, либо в противном случае база данных переводится в состояние, которое не включает в себя какие-либо записи транзакции. . Транзакции также гарантируют, что эффект параллельных транзакций удовлетворяет определенным гарантиям, известным как уровень изоляции. Самый высокий уровень изоляции сериализуемость, что гарантирует, что эффект одновременных транзакций эквивалентен их последовательному (то есть последовательному) выполнению.

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

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

  1. Начните транзакцию.
  2. Выполните набор манипуляций с данными и / или запросов.
  3. Если ошибок не происходит, транзакция фиксируется.
  4. При возникновении ошибки откатываем транзакцию.

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

Внутри многопользовательские базы данных хранят и обрабатывают транзакции, часто используя транзакцию. Я БЫ или XID.

Есть несколько различных способов реализации транзакций, кроме простого, описанного выше. Вложенные транзакции Например, это транзакции, которые содержат внутри себя операторы, запускающие новые транзакции (т. е. суб-транзакции). Многоуровневые транзакции представляют собой вариант вложенных транзакций, в которых суб-транзакции выполняются на разных уровнях многоуровневой системной архитектуры (например, с одной операцией на уровне ядра базы данных, одной операцией на уровне операционной системы).[2] Другой тип транзакции - это компенсационная сделка.

В SQL

Транзакции доступны в большинстве реализаций баз данных SQL, хотя и с разным уровнем надежности. Например, MySQL начал поддерживать транзакции с ранней версии 3.23, но InnoDB Механизм хранения не использовался по умолчанию до версии 5.5. Доступный ранее механизм хранения, MyISAM не поддерживает транзакции.

Транзакция обычно запускается с помощью команды НАЧИНАТЬ (хотя стандарт SQL определяет НАЧАТЬ СДЕЛКУ). Когда система обрабатывает СОВЕРШИТЬ заявление, транзакция завершается успешно. А ОТКАТ оператор также может завершить транзакцию, отменив любую работу, выполненную с момента НАЧИНАТЬ. Если автоматическая фиксация был отключен с началом транзакции, автоматическая фиксация также будет повторно включена с окончанием транзакции.

Можно установить уровень изоляции для отдельных транзакционных операций, а также глобально. На высшем уровне (ПРОЧИТАЙТЕ ЗАВЕРШЕНО), результат любой операции, выполненной после начала транзакции, останется невидимым для других пользователей базы данных, пока транзакция не завершится. На самом низком уровне (ПРОЧИТАЙТЕ НЕПРЕРЫВНО), который иногда может использоваться для обеспечения высокого уровня параллелизма, такие изменения будут сразу видны.

Объектные базы данных

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

После запуска транзакции записи или объекты базы данных блокируются либо только для чтения, либо для чтения-записи. Затем могут выполняться чтение и запись. Как только транзакция полностью определена, изменения фиксируются или откатываются. атомарно, так что в конце транзакции нет непоследовательность.

Распределенные транзакции

Реализация систем баз данных распределенные транзакции[3] как транзакции, обращающиеся к данным через несколько узлов. Распределенная транзакция обеспечивает выполнение свойств ACID на нескольких узлах и может включать такие системы, как базы данных, диспетчеры хранения, файловые системы, системы обмена сообщениями и другие диспетчеры данных. В распределенной транзакции обычно есть объект, координирующий весь процесс, чтобы гарантировать, что все части транзакции применяются ко всем соответствующим системам.

Транзакционные файловые системы

В Namesys Reiser4 файловая система для Linux[4] поддерживает транзакции, а с Microsoft Виндоус виста, Microsoft NTFS файловая система[5] поддерживает распределенные транзакции по сетям. В настоящее время проводятся исследования более согласованных с данными файловых систем, таких как Деформация транзакционной файловой системы (WTF).[6]

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

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

  1. ^ «Что такое транзакция? (Windows)». msdn.microsoft.com.
  2. ^ Beeri, C .; Бернштейн, П. А .; Гудман, Н. (1989). «Модель параллелизма в системах вложенных транзакций». Журнал ACM. 36 (1): 230–269. Дои:10.1145/62044.62046. S2CID  12956480.
  3. ^ Озсу, М. Тамер; Вальдуриес, Патрик (2011). Принципы распределенных систем баз данных, третье издание. Springer. Дои:10.1007/978-1-4419-8834-8. ISBN  978-1-4419-8833-1.
  4. ^ "Linux.org". Linux.org.
  5. ^ «Библиотека MSDN». Получено 16 октября 2014.
  6. ^ https://www.usenix.org/system/files/conference/nsdi16/nsdi16-paper-escriva.pdf

дальнейшее чтение

внешняя ссылка