
- •Предисловие
- •Основные функции систем управления базами данных (СУБД)
- •Основные понятия
- •Преимущества использования баз данных
- •Функции систем управления базами данных
- •Литература
- •Реляционная модель данных
- •Структуры данных. Фундаментальные свойства отношений
- •Целостность данных. Реляционные ключи
- •Манипулирование данными
- •Реляционная алгебра Кодда
- •Операции
- •Объединение
- •Пересечение
- •Разность
- •Декартово произведение
- •Сокращение (выборка, ограничение, селекция)
- •Проекция
- •Соединения
- •Деление
- •Приоритеты операций
- •Базис алгебры и ства операций
- •Базис
- •Свойства операций
- •Ограничения реляционной алгебры
- •Литература
- •Реляционное исчисление
- •Исчисление кортежей
- •Эквивалентность исчисления кортежей и реляционной алгебры
- •Исчисление доменов
- •Литература
- •Случаи неполной информации и ω-значения
- •Концепция трехзначной логики
- •Логические операторы
- •Кванторы
- •Арифметические операции и операции сравнения
- •ω-значения и домены
- •ω-значения и операторы реляционной алгебры
- •ω-значения и агрегирующие функции
- •Проблема интерпретации
- •ω-значения и ограничения целостности
- •Первичные ключи
- •Внешние ключи
- •Литература
- •Семантическое проектирование реляционных баз данных на основе ER-модели
- •Общий подход семантического моделирования
- •Основные понятия
- •Проектирование базы данных с помощью ER-модели
- •Литература
- •Проектирование реляционных баз данных при помощи нормализации
- •Жизненный цикл системы баз данных
- •Функциональные зависимости
- •Понятие функциональной зависимости
- •Тривиальные и нетривиальные зависимости
- •Замыкание множества зависимостей
- •Неприводимые множества зависимостей
- •Декомпозиция без потерь и функциональные зависимости
- •Диаграммы функциональных зависимостей
- •Сохранение независимости в смысле Риссанена
- •Многозначные зависимости
- •Нормализация
- •Понятие нормализации и её причины
- •Первая, вторая и третья нормальные формы
- •Нормальная форма Бойса–Кодда
- •Четвертая нормальная форма
- •Зависимости соединения и пятая нормальная форма
- •Литература
- •Основные принципы хранения данных во внешней памяти
- •Страничная организация хранения данных
- •Управление буферами внутренней памяти
- •Простая файловая организация страниц
- •Неупорядоченный файл
- •Упорядоченный файл
- •Индексирование
- •Индексно-прямой метод доступа
- •Индексно-последовательный метод доступа
- •Индекс на основе B+-деревья
- •Хэширование
- •Индексированные кластеры
- •Хэшированные кластеры
- •Литература
- •Управление транзакциями и синхронизация в реляционных СУБД
- •Понятие транзакции
- •Фундаментальные свойства транзакций
- •Изолированность транзакций
- •Синхронизационные блокировки
- •Простые блокировки
- •Гранулированные (намеренные) блокировки
- •Предикатные блокировки
- •Тупиковые ситуации
- •Метод временных меток
- •Механизм выделения версий данных
- •Литература
- •Журнализация и восстановление в реляционных СУБД
- •Журнализация и буферизация
- •Индивидуальный откат транзакции
- •Восстановление после мягкого сбоя
- •Восстановление после жесткого сбоя
- •Литература
- •Выполнение и оптимизация запросов в реляционных СУБД
- •Процесс оптимизации запроса
- •Преобразование запроса во внутреннюю форму
- •Преобразование запроса в каноническую форму
- •Выбор потенциальных низкоуровневых процедур
- •Генерация различных вариантов планов вычисления запроса и выбор плана с минимальными затратами
- •Низкоуровневая оптимизация операции выборки
- •Низкоуровневая оптимизация операции соединения
- •Литература
Хэшированные кластеры
Хешированные кластеры также применяются для кластеризации данных отношений по принципу, аналогичному индексированным кластерам. Но в хешированный кластер запись вносится с учетом применения хеш-функции к значению ключа кластера этого кортежа. Все кортежи с одинаковым значением ключа кластера хранятся на диске рядом друг с другом.
Корпорация Oracle рекомендует использовать хешированные кластеры при следующих условиях:
•выборка кортежей в запросах выполняется с учетом условий равенства, которые охватывают все атрибуты ключа кластера;
•кластеризованные таблицы остаются неизменными или есть возможность определить максимальное количество записей и максимальный объем npoстранства, требуемый для кластера, при его создании.
Литература
1.Ramakrishnan R., Gehrke J. Storage and Indexing // Database management systems (part III). — 3rd ed. — New York : McGraw-Hill Companies, Incorporated, 2003. — (McGraw-Hill international editions: Computer science series). — ISBN 9780072465631.
2.Бураков П. В., Петров В. Физическая организация данных // Введение в системы баз данных (глава 7). — СПб. : СПбГУ ИТМО, 2010.
3.Карпова И. П. Механизмы размещения данных и доступа к данным // Введение в базы дан-
ных (раздел 6). — URL: http : / / rema44 . ru / resurs / study / dblectio / dblect3 . html #
_Toc32409903.
4.Карпова Т. С. Физические модели баз данных // Базы данных: модели, разработка, реализации
(глава 9). — СПб. : Питер, 2002. — ISBN 5272002784.
5.Коннолли Т., Бегг К. Структура данных в файлах с различной организацией / пер. с англ. Р. Г. Имамутдинова, К. А. Птицына // Базы данных: проектирование, реализация и сопровождение (приложение В) / под ред. К. А. Птицына. — 3-е изд. — М. : Издательский дом „Вильямс“, 2003.
6.Кузнецов С. Д. Методы поиска в основной памяти // Методы сортировки и поиска (раздел 4). — URL: http://citforum.ru/programming/theory/sorting/sorting2.shtml#4.
7.Кузнецов С. Д. Физическое представление реляционных баз данных во внешней памяти. Индекс-
ные структуры // Базы данных. Вводный курс (лекция 12). — 2008. — URL: http://citforum.
ru/database/advanced_intro/34.shtml.
§9. Управление транзакциями и синхронизация в реляционных СУБД
Восстановление и параллельность связаны с общим понятием защиты данных, т. е. предохранения данных от утраты или повреждения по следующим причинам:
•Во время выполнения некоторых программ может произойти аварийный останов системы, в результате чего база данных может оказаться в непредсказуемом состоянии.
•При «одновременном» выполнении возможен конфликт между двумя программами из-за обращения к одним и тем же данным, что приведет к получению неправильных результатов как внутри базы данных, так и на выходе из нее.
57
9.1. Понятие транзакции
Определение 1. Транзакцией (transaction) называется группа последовательных операций чтения и/или изменения содержимого базы данных, которая представляет собой логическую единицу работы с данными.
Транзакция является логической единицей работы, выполняемой в базе данных. Она может быть представлена отдельной программой, частью программы или отдельной командой и включать произвольное количество операций, выполняемых в базе данных. С точки зрения администратора базы данных эксплуатация любого приложения может расцениваться как ряд транзакций, в промежутках между которыми выполняется обработка данных, осуществляемая вне среды базы данных.
Система, которая обеспечивает управление транзакциями, хотя и не предоставляет гарантию выполнения всех действий транзакции, но вполне может ее заменить другими средствами. А именно, система с поддержкой транзакций гарантирует, что если в транзакции будут выполнены некоторые обновления, а затем возникнет отказ еще до того, как транзакция достигнет своего завершения,
то все эти обновления будут отменены. Поэтому транзакция либо полностью выполняется, либо пол-
ностью отменяется (т. е. создается такая ситуация, как если бы эта транзакция вообще не выполнялась). Благодаря этому последовательность операций, которая по самой своей сути не является неразрывной, может быть преобразована в такую последовательность, которая внешне кажется неразрывной.
В общем, транзакции переводят систему из одного непротиворечивого состояния в другое непротиворечивое состояние и являются средством обеспечения целостности. Под непротиворечивостью понимается отсутствие нарушений каких-либо известных ограничений целостности.
Определение 2. Компонент системы, который обеспечивает такую неразрывность(или подобие неразрывности), называется диспетчером транзакций (монитор обработки транзакций, ТРмонитор).
Ни в одной СУБД не может быть предусмотрен априорный способ определения того, какие именно операции обновления могут быть сгруппированы для формирования единой логической транзакции. Поэтому должен применяться метод, позволяющий указывать границы каждой из транзакций извне, со стороны пользователя. Обычно в языках манипулирования данными транзакции определяются в виде (вместо указанных операторов могут использоваться их аналоги):
BEGIN TRANSACTION; // метка начала транзакции действие_1;
действие_2;
...
IF(условие_отката)
THEN ROLLBACK; // откат изменений в~случае возникновения откатных условий
// (приведение базы в~непротиворечивое состояние)
...
действие_N;
COMMIT; // успешное завершение транзакции, т.е. все~измененные или~добавленные данные фиксиру
Оператор ROLLBACK служит для намеренного отката базы данных по каким-либо соображениям составителя запроса. Может вовсе не присутствовать (вообще система для всех транзакций сама должна неявно вызывать оператор ROLLBACK в случае возникновения ошибок, т. к. бессмысленно писать вручную все возможные условия отката) или встречаться несколько раз где угодно в транзакции для случаев невыполнения каких-то интересующих условий.
58

|
PARTIALLY |
COMMIT |
|
|
COMMITTED |
||
DO_TRANSACTION |
COMMITTED |
||
|
|||
BEGIN_TRANSACTION |
ABORT |
|
|
ACTIVE |
|
||
|
|
FAILED ABORTED
Рис. 5. Диаграмма переходов для транзакции
Порядок выполнения операций транзакции принято обозначать с помощью диаграммы перехо-
дов (рис. 5):
•В состоянии ACTIVE происходит инициализация транзакции и это состояние остается активным, пока выполняются запросы транзакции. Возможен переход в состояние FAILED в силу вызова ROLLBACK.
•В состояние PARTIALLY COMMITTED попадаем, когда было выполнено последнее действие тела транзакции. Может оказаться, что в результате выполнения транзакции нарушены правила упорядочивания или ограничения целостности — в этом случае необходимо завершить транзакцию аварийно (abort). Еще возможна ситуация, когда в системе происходит отказ и все обновленные в транзакции данные невозможно успешно записать во внешнюю память — тогда тоже происходит аварийное завершение. Иначе транзакция выполнена успешно и можем перейти в состояние COMMIT.
•В состояние FAILED попадаем, если выполнение запланированных запросов не может быть продолжено (вызван откат) по причине невозможности фиксации данных или аварийного завершения.
•После отката транзакции попадаем в состояние ABORTED и база данных восстанавливается до исходного непротиворечивого состояния.
•В состояние COMMITTED попадаем в случае успешного завершения транзакции.
Для сохранения сведений о транзакциях СУБД ведёт журнал транзакций.
Определение 3. Журнал транзакций — это часть базы данных, в которую поступают данные обо всех изменениях всех объектов базы данных.
Журнал недоступен пользователям СУБД и поддерживается особо тщательно (иногда ведутся две копии журнала, хранимые на разных физических носителях). Форма записи в журнал изменений зависит от СУБД. Но обычно там фиксируется следующее:
•номер транзакции (номера присваиваются автоматически по возрастанию);
•состояние транзакции (завершена фиксацией или откатом, не завершена, находится в состоянии ожидания);
•точки сохранения (явные и неявные);
•команды, составляющие транзакцию
•и прочее.
Все изменения данных выполняются в оперативной памяти в буфере данных, затем фиксируются в журнале транзакций и в сегменте отката, и периодически (при выполнении контрольной точки) переписываются на диск. Процесс формирования контрольной точки (КТ) заключается в синхронизации данных, находящихся на диске (т. е. во внешней памяти) с теми данными, которые находятся в оперативной памяти: все модифицированные данные из оперативной памяти переписываются во вторичную память.
59

Элементарные операции различных транзакций могут выполняться в произвольной очередности (конечно, внутри каждой транзакции последовательность элементарных операций этой транзакции является строго определенной). Например, если есть несколько транзакций, состоящих из последовательности операций элементарных:
T pTp1q; Tp2q; : : : ; Tpnqq; Q pQp1q; Qp2q; : : : ; Qplqq; S pSp1q; Sp2q; : : : ; Sppqq
то реальная последовательность, в которой СУБД выполняет эти транзакции может быть, например, такой:
Tp1q; Qp1q; Tp2q; Sp1q; Sp2q; Qp2q; Tp3q; : : :
Определение 4. Набор из нескольких транзакций, элементарные операции которых чередуются друг с другом, называется смесью транзакций.
Определение 5. Последовательность, в которой выполняются элементарные операции заданного набора транзакций, называется графиком запуска набора транзакций.
Определение 6. График запуска набора транзакций называется последовательным, если транзакции выполняются строго по очереди. Если график запуска набора транзакций содержит чередующиеся элементарные операции транзакций, то такой график называется чередующимся.
Определение 7. Два графика называются эквивалентными, если при их выполнении будет получен один и тот же результат, независимо от начального состояния базы данных.
Определение 8. График запуска транзакции называется верным (сериализуемым), если он эквивалентен какому-либо последовательному графику.
9.2. Фундаментальные свойства транзакций
Более точно, в современных СУБД поддерживается понятие транзакции, характеризуемое аббревиатурой АСИД (ACID). В соответствии с этим понятием под транзакцией подразумевается последо-
вательность операций над базой данных, обладающая следующими свойствами:
1Атомарность (Atomicy)1: результаты всех операций (изменяющих данные в базе), успешно выполненных в пределах транзакции, должны быть отражены в состоянии базы данных, либо в состоянии базы данных не должно быть отражено действие ни одной операции. Это свойство позволяет относиться к транзакции, как к динамически образуемой составной операции над базой данных (в общем случае состав и порядок выполнения операций, выполняемых внутри транзакции, становится известным только на стадии выполнения).
2Согласованность (Consistency): транзакция может быть успешно завершена с фиксацией результатов своих операций только в том случае, когда действия операций не нарушают целостность базы данных, т. е. удовлетворяют набору ограничений целостности, определенных
для этой базы данных. Иными словами, в результате выполнения транзакции получаем непротиворечивое состояние базы данных.
3Изоляция (Isolation): несколько одновременно (параллельно или квазипараллельно) выполняемые транзакции никоим образом не должны действовать друг на друга. Другими словами,
результаты выполнения операций транзакции T1 не должны быть видны никакой другой транзакции T2 до тех пор, пока транзакция T1 не завершится успешным образом.
4Долговечность (устойчивость, Durability): после успешного завершения транзакции все изменения, которые были внесены в состояние базы данных операциями этой транзакции, должны гарантированно сохраняться, даже в случае сбоев аппаратуры или программного обеспечения.
1 Свойство атомарности могут называть свойством «всё или ничего».
60