Введение

Единица работы, выполняемая в системе управления базами данных.

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

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

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

Транзакционная база данных – это СУБД, которая обеспечивает свойства ACID для заключенного набора операций базы данных (начало-коммит). Транзакции гарантируют, что база данных всегда находится в согласованном состоянии, даже в случае одновременных обновлений и сбоев. Все операции записи в рамках транзакции имеют эффект "либо все, либо ничего", то есть либо транзакция успешно завершается и все изменения применяются, либо база данных возвращается в состояние, не содержащее никаких изменений, внесенных этой транзакцией. Транзакции также обеспечивают соблюдение определенных гарантий при одновременном выполнении, известных как уровни изоляции. Наивысший уровень изоляции – это сериализуемость, которая гарантирует, что эффект одновременных транзакций эквивалентен их последовательному (то есть, последовательному) выполнению. Большинство современных реляционных систем управления базами данных поддерживают транзакции. NoSQL базы данных отдают приоритет масштабируемости, одновременно поддерживая транзакции для обеспечения согласованности данных при одновременных обновлениях и доступах. В системе базы данных транзакция может состоять из одной или нескольких инструкций манипулирования данными и запросов, каждая из которых читает и/или записывает информацию в базу данных. Пользователи систем баз данных считают согласованность и целостность данных крайне важными. Простая транзакция обычно выполняется в системе базы данных на языке, подобном SQL, заключенном в блок транзакции, по следующему шаблону:

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

В SQL

Транзакции доступны в большинстве реализаций SQL-баз данных, хотя и с разным уровнем надежности. Например, MySQL начал поддерживать транзакции с ранней версии 3.23, но движок хранения InnoDB не был движком по умолчанию до версии 5.5. Более ранний доступный движок хранения, MyISAM, не поддерживает транзакции. Транзакция обычно начинается командой BEGIN (хотя стандарт SQL определяет START TRANSACTION). Когда система обрабатывает оператор COMMIT, транзакция завершается успешно. Оператор ROLLBACK также может завершить транзакцию, отменяя все изменения, внесенные после BEGIN. Если автокоммит был отключен в начале транзакции, он будет повторно включен по завершении транзакции. Можно установить уровень изоляции как для отдельных транзакционных операций, так и глобально. На самом высоком уровне (READ COMMITTED) результат любой операции, выполненной после начала транзакции, останется невидимым для других пользователей базы данных до завершения транзакции. На самом низком уровне (READ UNCOMMITTED), который иногда может использоваться для обеспечения высокой конкуренции, такие изменения будут видны немедленно.

Базы данных объектов

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

Распределенные операции

Системы баз данных реализуют распределенные транзакции как транзакции, обращающиеся к данным, расположенным на нескольких узлах. Распределенная транзакция обеспечивает соблюдение свойств ACID на множестве узлов и может включать в себя такие системы, как базы данных, менеджеры хранения, файловые системы, системы обмена сообщениями и другие менеджеры данных. В распределенной транзакции обычно присутствует сущность, координирующая весь процесс, чтобы гарантировать применение всех частей транзакции ко всем задействованным системам. Более того, интеграция Storage as a Service (StaaS) в этих средах критически важна, поскольку она предоставляет практически неограниченный пул ресурсов хранения, поддерживающий различные классы облачных хранилищ данных с разными уровнями доступности, масштабируемости и свойствами ACID. Эта интеграция необходима для достижения более высокой доступности, меньшего времени отклика и экономической эффективности в приложениях, интенсивно работающих с данными и развернутых в облачных хранилищах.

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

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