stringtranslate.com

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

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

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

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

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

Цель

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

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

  1. Дебет $100 на счет расходов на продукты
  2. Зачислите 100 долларов на текущий счет

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

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

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

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

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

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

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

Внутри многопользовательских баз данных транзакции хранятся и обрабатываются, часто с использованием идентификатора транзакции или 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 через несколько узлов и может включать такие системы, как базы данных, менеджеры хранилищ, файловые системы, системы обмена сообщениями и другие менеджеры данных. В распределенной транзакции обычно есть сущность, координирующая весь процесс, чтобы гарантировать, что все части транзакции применяются ко всем соответствующим системам. Более того, интеграция Storage as a Service (StaaS) в этих средах имеет решающее значение, поскольку она предлагает практически бесконечный пул ресурсов хранения, размещая ряд классов облачных хранилищ данных с различной доступностью, масштабируемостью и свойствами ACID. Эта интеграция необходима для достижения более высокой доступности, более низкого времени отклика и экономической эффективности в приложениях с интенсивным использованием данных, развернутых в облачных хранилищах данных. [5]

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

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

Смотрите также

Ссылки

  1. ^ «Что такое транзакция? (Windows)». msdn.microsoft.com . 7 января 2021 г.
  2. ^ DINCĂ, Ana-Maria; AXINTE, Sabina-Daniela; BACIVAROV, Ioan (29.12.2022). «Повышение производительности транзакций баз данных». Международный журнал информационной безопасности и киберпреступности . 11 (2): 29–34. doi :10.19107/ijisc.2022.02.02. ISSN  2285-9225. S2CID  259653728.
  3. ^ Бири, К.; Бернстайн, П.А.; Гудман, Н. (1989). «Модель параллелизма в системах вложенных транзакций». Журнал ACM . 36 (1): 230–269. doi : 10.1145/62044.62046 . S2CID  12956480.
  4. ^ Özsu, M. Tamer; Valduriez, Patrick (2011). Principles of Distributed Database Systems, Third Edition . Springer. Bibcode : 2011podd.book.....O. doi : 10.1007/978-1-4419-8834-8. ISBN 978-1-4419-8833-1.
  5. ^ Мансури, Ясер; Туси, Адель Наджаран; Буйя, Раджкумар (11 декабря 2017 г.). «Управление хранением данных в облачных средах: таксономия, обзор и будущие направления». ACM Computing Surveys . 50 (6): 91:1–91:51. doi :10.1145/3136623. ISSN  0360-0300.
  6. ^ "Linux.org". Linux.org .
  7. ^ "Библиотека MSDN". 4 февраля 2013 г. Получено 16 октября 2014 г.
  8. ^ https://www.usenix.org/system/files/conference/nsdi16/nsdi16-paper-escriva.pdf [ пустой URL PDF ]

Дальнейшее чтение

Внешние ссылки