Учебники

DDBMS — Системы обработки транзакций

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

операции

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

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

  • read_item () — читает элемент данных из хранилища в основную память.

  • modify_item () — изменить значение элемента в основной памяти.

  • write_item () — записывает измененное значение из основной памяти в хранилище.

read_item () — читает элемент данных из хранилища в основную память.

modify_item () — изменить значение элемента в основной памяти.

write_item () — записывает измененное значение из основной памяти в хранилище.

Доступ к базе данных ограничен операциями read_item () и write_item (). Аналогично, для всех транзакций чтение и запись образуют основные операции базы данных.

Операционные операции

Операции низкого уровня, выполняемые в транзакции:

  • begin_transaction — Маркер, который указывает начало выполнения транзакции.

  • read_item или write_item — Операции с базой данных, которые могут чередоваться с операциями с основной памятью как часть транзакции.

  • end_transaction — маркер, который указывает конец транзакции.

  • commit — сигнал, указывающий, что транзакция была успешно завершена полностью и не будет отменена.

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

begin_transaction — Маркер, который указывает начало выполнения транзакции.

read_item или write_item — Операции с базой данных, которые могут чередоваться с операциями с основной памятью как часть транзакции.

end_transaction — маркер, который указывает конец транзакции.

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

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

Состояния транзакции

Транзакция может проходить через подмножество из пяти состояний: активное, частично зафиксированное, зафиксированное, неудачное и прерванное.

  • Активный — начальное состояние, в которое входит транзакция, является активным состоянием. Транзакция остается в этом состоянии во время выполнения операций чтения, записи или других операций.

  • Частично зафиксировано — транзакция переходит в это состояние после выполнения последнего оператора транзакции.

  • Подтверждено — транзакция переходит в это состояние после успешного завершения транзакции и проверки системы подали сигнал подтверждения.

  • Failed (Сбой) — транзакция переходит из частично зафиксированного состояния или активного состояния в состояние сбоя, когда обнаруживается, что нормальное выполнение больше не может продолжаться или системные проверки не пройдены.

  • Прервано — это состояние после отката транзакции после сбоя и восстановления базы данных в состояние, которое было до ее начала.

Активный — начальное состояние, в которое входит транзакция, является активным состоянием. Транзакция остается в этом состоянии во время выполнения операций чтения, записи или других операций.

Частично зафиксировано — транзакция переходит в это состояние после выполнения последнего оператора транзакции.

Подтверждено — транзакция переходит в это состояние после успешного завершения транзакции и проверки системы подали сигнал подтверждения.

Failed (Сбой) — транзакция переходит из частично зафиксированного состояния или активного состояния в состояние сбоя, когда обнаруживается, что нормальное выполнение больше не может продолжаться или системные проверки не пройдены.

Прервано — это состояние после отката транзакции после сбоя и восстановления базы данных в состояние, которое было до ее начала.

Следующая диаграмма перехода состояний отображает состояния в транзакции и операции транзакции низкого уровня, которые вызывают изменение состояний.

Диаграмма переходного состояния

Желательные свойства сделок

Любая транзакция должна поддерживать свойства ACID, а именно. Атомность, последовательность, изоляция и долговечность.

  • Атомарность — это свойство указывает, что транзакция является атомарной единицей обработки, то есть либо выполняется полностью, либо не выполняется вообще. Частичное обновление не должно существовать.

  • Согласованность — транзакция должна перевести базу данных из одного согласованного состояния в другое согласованное состояние. Это не должно отрицательно влиять на любой элемент данных в базе данных.

  • Изоляция — транзакция должна выполняться так, как если бы она была единственной в системе. Не должно быть никаких помех от других одновременных транзакций, которые выполняются одновременно.

  • Долговечность — если совершенная транзакция приводит к изменению, это изменение должно быть долговременным в базе данных и не теряться в случае какого-либо сбоя.

Атомарность — это свойство указывает, что транзакция является атомарной единицей обработки, то есть либо выполняется полностью, либо не выполняется вообще. Частичное обновление не должно существовать.

Согласованность — транзакция должна перевести базу данных из одного согласованного состояния в другое согласованное состояние. Это не должно отрицательно влиять на любой элемент данных в базе данных.

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

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

Расписания и конфликты

В системе с несколькими одновременными транзакциями расписание — это общий порядок выполнения операций. При заданном расписании S, состоящем из n транзакций, скажем, T1, T2, T3 ……… ..Tn; для любой транзакции Ti операции в Ti должны выполняться в соответствии с графиком S.

Типы расписаний

Есть два типа графиков —

  • Последовательные расписания — в последовательном расписании в любой момент времени активна только одна транзакция, т.е. нет перекрытия транзакций. Это изображено на следующем графике —

Последовательные расписания — в последовательном расписании в любой момент времени активна только одна транзакция, т.е. нет перекрытия транзакций. Это изображено на следующем графике —

Серийные Расписания

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

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

Параллельные графики

Конфликты в расписании

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

  • Эти две операции являются частями разных транзакций.

  • Обе операции обращаются к одному и тому же элементу данных.

  • По крайней мере, одна из операций является операцией write_item (), то есть она пытается изменить элемент данных.

Эти две операции являются частями разных транзакций.

Обе операции обращаются к одному и тому же элементу данных.

По крайней мере, одна из операций является операцией write_item (), то есть она пытается изменить элемент данных.

Сериализуемость

Сериализуемое расписание «n» транзакций — это параллельное расписание, которое эквивалентно последовательному расписанию, состоящему из тех же «n» транзакций. Сериализуемое расписание содержит правильность последовательного расписания, одновременно обеспечивая лучшее использование ЦП параллельного расписания.

Эквивалентность графиков

Эквивалентность двух графиков может быть следующих типов —

Эквивалентность результатов — два графика, выдающих идентичные результаты, называются эквивалентными.

Эквивалентность представления — два расписания, которые выполняют подобное действие подобным образом, называются эквивалентными представления.

Эквивалентность конфликта — два расписания называются конфликтно-эквивалентными, если оба содержат одинаковый набор транзакций и имеют одинаковый порядок конфликтующих пар операций.