- PVSM.RU - https://www.pvsm.ru -
Всем бобра! Мы активно расширяем наш, так сказать, ассортимент курсов, и вот рады представить новый: «Реляционные СУБД» [1]. Курс создан одним из ведущих преподавателей курса «Администратор Linux» [2] — Алексеем Цыкуновым [3]. В остальном всё будет как обычно: полезности и открытые уроки [4], на которых Алексей будет делиться разными вещами, что не входят в сам курс.
Поехали!
Транзакцию можно определить как набор задач, выполнение которых является обязательным условием для корректного завершения транзакции. Единичной задачей является минимальный неделимый блок изменения данных.
Приведем пример простой транзакции. Предположим, работник банка переводит 500 рупий с аккаунта А на аккаунт Б. Это маленькая и простая транзакция включает в себя несколько низкоуровневых задач.
Аккаунт А
Open_Account(A)
Old_Balance = A.balance
New_Balance = Old_Balance - 500
A.balance = New_Balance
Close_Account(A)
Аккаунт Б
Open_Account(B)
Old_Balance = B.balance
New_Balance = Old_Balance + 500
B.balance = New_Balance
Close_Account(B)

Свойства ACID
Транзакция в системе базы данных должна сохранять Атомарность (Atomicity), Согласованность (Consistency), Изолированность (Isolation) и Устойчивость (Durability) — сокращенно ACID — для обеспечения точности, полноты и целостности данных:
Сериализация
Когда несколько транзакций выполняются операционной системой в мультипрограммной среде, есть вероятность, что инструкции одной транзакции перемешаются с инструкциями другой.
В мультитранзакционной среде последовательное расписание считается бенчмарком. Порядок выполнения инструкций в транзакции не может быть изменен, но выполнение инструкций двух транзакций может носить случайный характер. Выполнение не приносит вреда в случае, когда две транзакции взаимно независимы и работают над разными сегментами данных; но если они используют одни и те же данные, результаты могут отличаться, что может привести базу данных к несогласованному состоянию.
Для решения этой проблемы, мы разрешаем параллельное выполнение расписания транзакций в том случае, если транзакции сериализованы или имеют некоторое отношение эквивалентности.
Эквивалентные расписания
Эквивалентные расписания могут быть следующих типов:
Эквивалентность результата
Если два расписания после выполнения выдают одинаковый результат, их считают эквивалентными по результату. Результаты могут совпадать для одних значений и отличаться для другого набора значений. Поэтому такая эквивалентность обычно не считается значительной.
Эквивалентность представления
Два расписания считаются эквивалентными по представлению в том случае, если транзакции в каждом из расписаний выполняют схожие действия схожим образом.
К примеру:
Эквивалентность конфликта
Два расписания будут конфликтовать, если они обладают следующими свойствами:
Два расписания с несколькими транзакциями с конфликтующими операциями считаются эквивалентными конфликтом только в том случае, если:
Примечание — расписания эквивалентные по представлению являются сериализуемыми по представлению, а конфликт-эквивалентные — конфликт-сериализуемыми. Все конфликт-сериализуемые расписания являются сериализуемыми по представлению.
Состояния Транзакций
Транзакция в базе данных может находиться в следующих состояниях:

THE END
Как всегда ждём комментарии, вопрос, которые можно задать как тут, так и на открытом уроке [4] у Алексея [3].
Автор: MaxRokatansky
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/292664
Ссылки в тексте:
[1] «Реляционные СУБД»: https://otus.pw/YUN9/
[2] «Администратор Linux»: https://otus.pw/XkNh/
[3] Алексеем Цыкуновым: https://otus.pw/gCVj/
[4] открытые уроки: https://otus.pw/6ADj/
[5] Источник: https://habr.com/post/423309/?utm_source=habrahabr&utm_medium=rss&utm_campaign=423309
Нажмите здесь для печати.