Обработка транзакций

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

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

Описание[править | править исходный текст]

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

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

Обработка транзакций позволяет нескольким отдельным операциям автоматически быть связанными друг с другом, как единая неделимая транзакция. Системы обработки транзакций гарантирует, что либо все операции в транзакции завершены без ошибок, либо ни одна из них. Если некоторые из операций завершены, но с ошибками, а другие без, системы обработки транзакций дает команду на «откат» всех операций транзакции (в том числе удачных), что означает стирание всех следов операции и восстановление системы до согласованного известного состояния, которое было до начала процесса транзакции. Если все операции транзакции завершены успешно, то транзакция фиксируется в системе, и все изменения в базе данных становятся «постоянными» (commited); транзакции не могут быть отменены, если они уже были сделаны.

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

Транзакции оформлены в строгом хронологическом порядке. Если сделка N+1 намерена коснуться той же части базы данных что и транзакция N, транзакция N+1 не начинается до момента совершения транзакции N. До совершения любых транзакций, все остальные транзакции, затрагивающие ту же часть системы, также должны быть завершены; не может быть никаких «дырок» в последовательности предыдущих транзакций.


Методология[править | править исходный текст]

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

Откат[править | править исходный текст]

Откат (англ. rollback)

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

Прогон[править | править исходный текст]

Прогон (англ. rollforward)

Кроме того, можно вести отдельный журнал всех изменений базы данных (иногда это называется after images); это не требует отката неудачных операций, но это полезно для обновления базы данных в случае отказа базы данных, поэтому некоторые системы обработки транзакций обеспечивают эту функцию. Если база данных отказывает совсем, она должна быть восстановлена из последней резервной. Резервные не будут отражать операции, совершенные после ее создания. Однако, как только будет восстановлена база данных, журнал after images может быть применен к базе данных (rollforward), чтобы привести ее в актуальное состояние. Любые транзакции, которые находятся в процессе на момент сбоя, могут быть свернуты. Результат представляет собой базу данных в известное согласованное состояние, которое включает результаты всех транзакций, совершенных до момента отказа.

Взаимная блокировка[править | править исходный текст]

Взаимная блокировка (англ. deadlocks)

В некоторых случаях, две транзакции могут в ходе их обработки пытаться получить доступ к одной и той же части базы данных в одно и то же время, таким образом, что это будет препятствовать их совершению. Например, транзакция А может получить доступ к части Х базы данных, и транзакция В может получить доступ к Y части базы данных. Если в этот момент транзакция А пытается получить доступ к части Y базы данных, в то время как транзакция B пытается получить доступ к части X, возникает ситуация взаимоблокировки, и ни одна транзакция не может быть произведена. Системы обработки транзакций предназначены для обнаружения таких ситуаций. Обычно обе транзакции отменяются и производится откат, а затем они автоматически запускаются в другом порядке, так что взаимоблокировка не повторится. Или иногда, только одна из транзакций, попавших в тупик, отменяется, производится откат, и автоматически повторяется после небольшой задержки.

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

ACID критерии (Атомарность, Последовательность, Изоляция, Долговечность)[править | править исходный текст]

Обработка транзакций имеет следующие преимущества:

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

Внедрение[править | править исходный текст]

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

Основным открытым отраслевым стандартом является X/Open Distributed Transaction Processing (DTP) (см. JTA). Однако, проприетарное среды обработки транзакций такие, как CICS компании IBM по-прежнему очень популярны.

Внедрение современной обработки транзакций сочетает в себе элементы объектно-ориентированной стойкости с сохранением традиционного мониторинга транзакций. Одним из таких внедрений является коммерческий DTS/S1 продукт от Obsidian Dynamics.

См. также[править | править исходный текст]