Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

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

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

Цель [ править ]

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

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

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

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

Транзакционные базы данных [ править ]

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

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

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

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

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

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

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

В SQL [ править ]

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

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

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

Базы данных объектов [ править ]

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

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

Распределенные транзакции [ править ]

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

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

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

См. Также [ править ]

  • Контроль параллелизма
  • Сообщение недействительно

Ссылки [ править ]

  1. ^ «Что такое транзакция? (Windows)» . msdn.microsoft.com .
  2. ^ Beeri, C .; Bernstein, PA; Гудман, Н. (1989). «Модель параллелизма в системах вложенных транзакций». Журнал ACM . 36 (1): 230–269. DOI : 10.1145 / 62044.62046 . S2CID 12956480 . 
  3. ^ Озсу, М. Тамер; Вальдуриес, Патрик (2011). Принципы распределенных систем баз данных, третье издание . Springer. DOI : 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

Дальнейшее чтение [ править ]

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

Внешние ссылки [ править ]

  • c2: Обработка транзакций
  • https://docs.oracle.com/database/121/CNCPT/transact.htm#CNCPT016
  • https://docs.oracle.com/cd/B28359_01/server.111/b28318/transact.htm