Что такое транзакция?
Транзакция — это группа операций со следующими свойствами: atomic, consistent, isolated и durable (ACID). Поддержка транзакций позволяет разрабатывать новые типы приложений, упрощая процесс разработки и делая приложение более надежным. Оставшаяся часть этого раздела содержит сценарии, демонстрирующие необходимость этих свойств, а затем таблицу, которая определяет каждое свойство.
В атомарной группе операций либо каждая операция в группе должна быть успешной, либо эффекты всех операций должны быть отменены (также известные как откат). Например, банковский перевод должен представлять собой атомарный набор из двух операций: дебет с одного счета и кредит на другой. Дебет и кредит должны быть реализованы как атомарная группа. Если эти две операции не увенчаются успехом, то перевод либо несправедливо в пользу банка или владельца счета.
Требование согласованности означает, что данные будут согласованными после транзакции (при условии, что мы начали работу с согласованной системой до транзакции). В примере банковского перевода согласованность может быть определена как наличие константы совокупного остатка на двух счетах. Чтобы реализовать согласованность в примере банковского перевода, дебетовые и кредитные операции просто должны быть для одной и той же суммы денег.
Другим примером транзакции является обновление веб-сайта. Сайт электронной коммерции требует, чтобы новая страница навигации по категориям продуктов отображалась точно в то же время, что и страницы сведений о продукте, описывающие новые продукты. В этом случае необходимо обновить и добавить несколько записей каталога под управлением транзакции. Мало того, что необходимо, чтобы обновления были атомарными, но также необходимо, чтобы клиент, который в настоящее время покупает, не должен видеть обновления в процессе выполнения. Это пример свойства изоляции транзакций.
Свойство устойчивости требует, чтобы после завершения обновления его последствия сохранялись, даже если система перестает отвечать на запросы. В предыдущем примере устойчивость можно обеспечить просто путем обеспечения адекватного восстановления данных, чтобы все новые записи файловой системы, представляющие добавление нового продукта на сайт, отображались после того, как система перестает отвечать на запросы. Для этого требуется система с механизмами резервного копирования, восстановления и обеспечения высокой доступности данных.
Гарантия атомарности транзакции, а также других свойств присутствует при любом количестве сбоев, включая сбои, возникающие на этапе восстановления предыдущего сбоя. В конечном итоге система достигнет одного из двух состояний: все операции были применены или ни одна из них не была применена.
Свойства транзакции приведены в следующей таблице.
Термин | Описание |
---|---|
Атомной |
Либо все операции в транзакции выполняются успешно, либо ни одна из них не сохраняется. |
Последовательной |
Если данные согласованы до начала транзакции, они будут согласованы после завершения транзакции. |
Изолированные |
Результаты транзакции, которая выполняется, скрыты от всех остальных транзакций. |
Прочный |
После завершения транзакции ее результаты будут постоянными и выживут при сбое системы. |
Эти свойства гарантируют, что программное обеспечение может обрабатывать непредвиденные ошибки, так как оно может просто прервать транзакцию, когда непредвиденная ситуация препятствует успешному завершению. Инфраструктура транзакций обеспечивает откат всех последствий прерванной транзакции, возвращая данные в согласованное состояние. Таким образом, транзакционная система обеспечивает корректное восстановление после сбоев системы.
Чтобы гарантировать свойства ACID, система, поддерживающая транзакции, должна иметь надежную возможность ведения журнала, которую можно использовать для фиксации или отката транзакций при необходимости. Дополнительные сведения см. в разделе Common Log File System.