Транзакция базы данных
Эта статья нуждается в дополнительных цитатах для проверки . ( август 2010 г. ) |
Транзакция базы данных символизирует единицу работы , выполняемую в системе управления базой данных (или аналогичной системе) с базой данных , которая обрабатывается последовательным и надежным способом, независимым от других транзакций. Транзакция обычно представляет собой любое изменение в базе данных. Транзакции в среде базы данных имеют две основные цели:
- Обеспечить надежные единицы работы, которые позволяют правильно восстанавливаться после сбоев и поддерживать целостность базы данных даже в случае сбоя системы. Например: когда выполнение преждевременно и неожиданно прекращается (полностью или частично), и в этом случае многие операции с базой данных остаются незавершенными с неясным статусом.
- Чтобы обеспечить изоляцию между программами, одновременно обращающимися к базе данных. Если такая изоляция не обеспечена, результаты программ могут оказаться ошибочными.
В системе управления базами данных транзакция — это отдельная единица логики или работы, иногда состоящая из нескольких операций. Любое логическое вычисление, выполняемое в базе данных в согласованном режиме, называется транзакцией. Одним из примеров является перевод с одного банковского счета на другой: полная транзакция требует вычитания суммы, подлежащей переводу, с одного счета и добавления этой же суммы на другой.
Транзакция базы данных по определению должна быть атомарной (она должна быть либо полной, либо не иметь никакого эффекта), согласованной (она должна соответствовать существующим ограничениям в базе данных), изолированной (она не должна влиять на другие транзакции) и устойчивой. (он должен быть записан в постоянное хранилище). [1] Специалисты по базам данных часто называют эти свойства транзакций баз данных аббревиатурой ACID .
Цель [ править ]
Базы данных и другие хранилища данных, для которых целостность данных имеет первостепенное значение, часто включают в себя возможность обработки транзакций для поддержания целостности данных. Одна транзакция состоит из одной или нескольких независимых единиц работы, каждая из которых считывает и/или записывает информацию в базу данных или другое хранилище данных. Когда это происходит, часто важно гарантировать, что вся такая обработка оставляет базу данных или хранилище данных в согласованном состоянии.
Примеры систем двойной записи часто иллюстрируют концепцию транзакций. При двойной записи каждый дебет требует записи соответствующего кредита. Если кто-то выписывает чек на 100 долларов для покупки продуктов, транзакционная система двойной записи должна зарегистрировать следующие две записи, чтобы охватить одну транзакцию:
- Дебетовать 100 долларов США на счет расходов на продукты
- Зачислите 100 долларов США на текущий счет
Транзакционная система либо пропустит обе записи, либо обе записи завершится неудачно. Рассматривая запись нескольких записей как атомарную транзакционную единицу работы, система поддерживает целостность записанных данных. Другими словами, ни у кого не возникает ситуация, когда дебет регистрируется, но не регистрируется соответствующий кредит, или наоборот.
Транзакционные базы данных [ править ]
— Транзакционная база данных это СУБД , которая предоставляет свойства ACID для ограниченного набора операций с базой данных (начало-фиксация). Транзакции гарантируют, что база данных всегда находится в согласованном состоянии, даже в случае одновременных обновлений и сбоев. [2] Все операции записи внутри транзакции имеют эффект «все или ничего», то есть либо транзакция завершается успешно и все записи вступают в силу, либо в противном случае база данных переводится в состояние, которое не включает в себя какие-либо операции записи транзакции. . Транзакции также гарантируют, что результат параллельных транзакций удовлетворяет определенным гарантиям, известным как уровень изоляции . Высшим уровнем изоляции является сериализуемость , которая гарантирует, что эффект от параллельных транзакций эквивалентен их последовательному (т. е. последовательному) выполнению.
Самый современный [update] системы управления реляционными базами данных поддерживают транзакции. Базы данных NoSQL отдают приоритет масштабируемости наряду с поддержкой транзакций, чтобы гарантировать согласованность данных в случае одновременных обновлений и доступа.
В системе базы данных транзакция может состоять из одного или нескольких операторов и запросов манипулирования данными, каждый из которых читает и/или записывает информацию в базу данных. Пользователи систем баз данных считают согласованность и целостность данных очень важными. Простая транзакция обычно выдается в систему базы данных на таком языке, как SQL, завернутая в транзакцию, используя шаблон, аналогичный следующему:
- Начните транзакцию.
- Выполнить набор манипуляций с данными и/или запросов.
- Если ошибок не возникло, зафиксируйте транзакцию.
- Если произойдет ошибка, откатите транзакцию.
Операция фиксации транзакции сохраняет все результаты манипуляций с данными в рамках транзакции в базе данных. Операция отката транзакции не сохраняет в базе данных частичные результаты манипуляций с данными в рамках транзакции. Ни в коем случае нельзя фиксировать частичную транзакцию в базе данных, поскольку это приведет к тому, что база данных окажется в несогласованном состоянии.
Внутри многопользовательских баз данных хранятся и обрабатываются транзакции, часто с использованием идентификатора транзакции или XID.
Существует множество различных способов реализации транзакций, кроме простого способа, описанного выше. Например, вложенные транзакции — это транзакции, которые содержат внутри себя операторы, запускающие новые транзакции (т. е. субтранзакции). Многоуровневые транзакции — это вариант вложенных транзакций, в которых субтранзакции происходят на разных уровнях многоуровневой системной архитектуры (например, одна операция на уровне ядра базы данных, одна операция на уровне операционной системы). [3] Другим видом сделки является компенсационная сделка .
В SQL [ править ]
Транзакции доступны в большинстве реализаций баз данных SQL, хотя и с разным уровнем надежности. Например, MySQL начал поддерживать транзакции с ранней версии 3.23, но механизм хранения InnoDB не использовался по умолчанию до версии 5.5. Ранее доступный механизм хранения MyISAM не поддерживает транзакции.
Транзакция обычно запускается с помощью команды BEGIN
(хотя стандарт SQL определяет START TRANSACTION
). Когда система обрабатывает COMMIT
оператор, транзакция завершается успешным завершением. А ROLLBACK
Оператор также может завершить транзакцию, отменяя всю работу, выполненную с момента BEGIN
. Если автофиксация была отключена в начале транзакции, автофиксация также будет повторно включена по окончании транзакции.
Можно установить уровень изоляции как для отдельных транзакционных операций, так и глобально. На высшем уровне( READ COMMITTED
), результат любой операции, выполненной после начала транзакции, останется невидимым для других пользователей базы данных до тех пор, пока транзакция не завершится. На самом низком уровне ( READ UNCOMMITTED
), которые иногда могут использоваться для обеспечения высокого параллелизма, такие изменения будут сразу видны.
Базы данных объектов [ править ]
Реляционные базы данных традиционно состоят из таблиц с полями и записями фиксированного размера. -объекты переменного размера Базы данных объектов содержат BLOB , возможно, сериализуемые или содержащие mime-тип . Фундаментальное сходство между реляционными и объектными базами данных — это запуск и фиксация или откат .
После запуска транзакции записи или объекты базы данных блокируются либо только для чтения, либо для чтения и записи. Затем могут происходить операции чтения и записи. После того как транзакция полностью определена, изменения фиксируются или откатываются атомарно , так что в конце транзакции не возникает несогласованности .
Распределенные транзакции [ править ]
Системы баз данных реализуют распределенные транзакции [4] как транзакции, осуществляющие доступ к данным через несколько узлов. Распределенная транзакция применяет свойства ACID на нескольких узлах и может включать в себя такие системы, как базы данных, менеджеры хранения, файловые системы, системы обмена сообщениями и другие менеджеры данных. В распределенной транзакции обычно существует организация, координирующая весь процесс, чтобы гарантировать, что все части транзакции применяются ко всем соответствующим системам. Более того, интеграция системы хранения как услуги (StaaS) в эти среды имеет решающее значение, поскольку она предлагает практически бесконечный пул ресурсов хранения, включающий ряд классов облачных хранилищ данных с различной доступностью, масштабируемостью и свойствами ACID. Эта интеграция необходима для достижения более высокой доступности, сокращения времени отклика и экономической эффективности в приложениях с интенсивным использованием данных, развернутых в облачных хранилищах данных. [5]
Транзакционные файловые системы [ править ]
Файловая система Namesys Reiser4 для Linux [6] поддерживает транзакции, а начиная с Microsoft Windows Vista Microsoft NTFS. — файловую систему [7] поддерживает распределенные транзакции по сетям. Проводятся исследования файловых систем с более согласованными данными, таких как транзакционная файловая система Warp (WTF). [8]
См. также [ править ]
- КИСЛОТА
- Управление параллелизмом
- Критический раздел
- Публикация недействительна
- Расписание транзакций базы данных
Ссылки [ править ]
- ^ «Что такое транзакция? (Windows)» . msdn.microsoft.com . 7 января 2021 г.
- ^ ДИНКА, Ана-Мария; АКСИНТЕ, Сабина-Даниэла; БАЦИВАРОВ, Иоанн (29 декабря 2022 г.). «Повышение производительности транзакций базы данных» . Международный журнал информационной безопасности и киберпреступности . 11 (2): 29–34. дои : 10.19107/ijisc.2022.02.02 . ISSN 2285-9225 . S2CID 259653728 .
- ^ Бери, К.; Бернштейн, Пенсильвания; Гудман, Н. (1989). «Модель параллелизма в системах вложенных транзакций» . Журнал АКМ . 36 (1): 230–269. дои : 10.1145/62044.62046 . S2CID 12956480 .
- ^ Озсу, М. Тамер; Вальдурье, Патрик (2011). Принципы систем распределенных баз данных, третье издание . Спрингер. Бибкод : 2011podd.book.....O . дои : 10.1007/978-1-4419-8834-8 . ISBN 978-1-4419-8833-1 .
- ^ Мансури, Ясер; Туси, Адель Надджаран; Буя, Раджкумар (11 декабря 2017 г.). «Управление хранением данных в облачных средах: таксономия, исследование и будущие направления» . Обзоры вычислительной техники ACM . 50 (6): 91:1–91:51. дои : 10.1145/3136623 . ISSN 0360-0300 .
- ^ «Линукс.орг» . Linux.org .
- ^ «Библиотека MSDN» . 4 февраля 2013 года . Проверено 16 октября 2014 г.
- ^ https://www.usenix.org/system/files/conference/nsdi16/nsdi16-paper-escriva.pdf [ пустой URL PDF ]
Дальнейшее чтение [ править ]
- Филип А. Бернштейн , Эрик Ньюкомер (2009): Принципы обработки транзакций , 2-е издание , Морган Кауфманн (Elsevier), ISBN 978-1-55860-623-4
- Герхард Вейкум, Готфрид Воссен (2001), Транзакционные информационные системы: теория, алгоритмы и практика параллельного управления и восстановления , Морган Кауфманн, ISBN 1-55860-508-8