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

редактировать

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

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

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

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

Содержание

  • 1 Цель
  • 2 Транзакционные базы данных
    • 2.1 В SQL
  • 3 Объектные базы данных
  • 4 Распределенные транзакции
  • 5 Транзакционные файловые системы
  • 6 См. Также
  • 7 Ссылки
  • 8 Дополнительная литература
  • 9 Внешние ссылки

Назначение

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

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

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

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

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

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

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

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

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

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

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

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

В SQL

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

Транзакция обычно запускается с помощью команды BEGIN(хотя стандарт SQL определяет START TRANSACTION). Когда система обрабатывает инструкцию COMMIT , транзакция завершается успешно. Оператор ROLLBACK также может завершить транзакцию, отменив любую работу, выполненную с BEGIN. Если autocommit был отключен в начале транзакции, autocommit также будет повторно включен с окончанием транзакции.

Можно установить уровень изоляции как для отдельных транзакционных операций, так и глобально. На самом высоком уровне (READ COMMITTED) результат любой операции, выполненной после начала транзакции, будет оставаться невидимым для других пользователей базы данных до ее завершения. На самом низком уровне (READ UNCOMMITTED), который иногда может использоваться для обеспечения высокого уровня параллелизма, такие изменения будут немедленно видны.

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

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

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

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

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

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

Файловая система Namesys Reiser4 для Linux поддерживает транзакции, а с Microsoft Windows Vista, файловая система Microsoft NTFS поддерживает распределенные транзакции в сетях. В настоящее время проводятся исследования более согласованных с данными файловых систем, таких как (WTF).

См. Также

Ссылки

Дополнительная литература

  • Филип А. Бернштейн, Эрик Новичок (2009): Принципы обработки транзакций, 2-е издание, Морган Кауфманн (Elsevier), ISBN 978-1 -55860-623-4
  • Герхард Вейкум, Готфрид Фоссен (2001), Транзакционные информационные системы: теория, алгоритмы и практика управления параллельным выполнением и восстановления, Морган Кауфманн, ISBN 1-55860-508-8

Внешние ссылки

Последняя правка сделана 2021-05-17 14:12:14
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте