
- •Введение.
- •Информация и данные.
- •Выч. Система
- •Админ-р
- •Жизненный цикл БнД.
- •Классификация БнД.
- •Преимущества организации субд.
- •Недостатки организации бд.
- •Проектирование бд. (общий подход)
- •Независимость данных (2 уровня).
- •Концептуальное проектирование. Модели данных. Модель сущность-связь.
- •Инфологические мд.
- •Модель результ.
- •Объединение локальных моделей в глобальные.
- •Логическое проектирование.
- •Сетевая модель данных.
- •Правила построения сетевой модели.
- •Реляционная модель данных.
- •Плоский файл.
- •Хронологическая модель данных.
- •Операции над данными.
- •Операции реляционной алгебры.
- •Операторы обновления:
- •Реляционные сравнения:
- •Реляционное исчисление с переменными-кортежами.
- •Реляционное исчисление с переменными на доменах.
- •Реляционные ямд.
- •Язык запросов в sql.
- •Защита баз данных.
- •Функциональные зависимости.
- •Покрытие множества зависимостей.
- •Вычисление замыканий.
- •Декомпозиция схем отношений.
- •Нормализация отношений.
- •Алгоритм1: пополняющий декомпозицию схем отношений, которая обладает свойством соединения без потерь и приводит к отношениям находящимся в нфбк.
- •Алгоритм 2: приведения отношения к 3нф, использующей декомпозицию, сохраняющую функциональные зависимости.
- •Многозначные зависимости.
- •Правила вывода (аксиомы) для многозначных зависимостей.
- •Аксиомы, связывающие функциональные зависимости и многозначные зависимости.
- •Правила вывода:
- •Алгоритм вычисления базиса:
- •Секретность данных.
- •Физическая организация бд.
- •Методы доступа к данным.
- •Оптимизация запросов.
- •Общие стратегии оптимизации:
- •Законы оптимизации.
- •Алгоритм оптимизации выражений ра.
- •Точная оптимизация для подмножества реляционных запросов.
- •Минимизация конъюнктивных запросов.
- •Правила построения табло запросов:
- •Метод нахождения min-го запроса для простого тз.
- •Параллельные операции над бд.
- •Основные понятия.
- •Бесконечные ожидания и тупики.
- •Протоколы и расписание.
- •Простая модель транзакции.
- •Метод, позволяющий определить сериализуемость расписания.
- •Модель с блокировками для чтения и записи.
- •Параллельный доступ к иерархически структурированным элементам.
- •Алгоритм проверки сериализуемости расписания.
- •Защита от отказов.
- •Меры для восстановления бд.
- •Модификация запросов в распределенных бд.
- •Фрагменты отношений.
Модель с блокировками для чтения и записи.
Если элемент блокирован для записи, то на его значение воздействует функция . Если для чтения – значение элемента не изменяется.
Метод проверки сериализуемости расписания:
Строится граф предшествования. Узлы – транзакции. Дуги определяются следующим образом:
Транзакция устанавливает блокировку для чтения элемента А, транзакция , следующая за , устанавливает блокировку для записи А. Строится дуга из в .
Транзакция устанавливает блокировку для записи А, а транзакция , следующая за ней (если она существует) устанавливает блокировку так же для записи. Тогда строим дугу из в . Пусть далее,
блокирует А для чтения после того, как снимет свою блокировку для записи, но перед тем, как установит свою блокировку для записи. Если не существует, то любая транзакция, которая блокирует А для чтения после того, как разблокирует его. Тогда строим дугу из в
.
Если граф имеет циклы, то расписание не сериализуемо.
Параллельный доступ к иерархически структурированным элементам.
Во многих случаях совокупность элементов, к которым транзакция осуществляет доступ, может рассматриваться как дерево:
элементы являются узлами В-дерева;
логическая БД структурирована согласно иерархической модели;
РБД может иметь элементы на 4-х уровнях:
а) БД в целом;
б) каждое отношение;
в) каждый блок, в котором хранится файл, соответствующий отношению;
г) каждый кортеж.
При блокировке элементов можно придерживаться 2-х разных стратегий:
Блокировка элемента может предполагать и блокировку всех элементов, являющихся его потомками. Такая стратегия экономит время, т.к. она исключает блокировку более мелких элементов.
Блокировать элемент без блокировки его потомков.
Будем говорить, что транзакция подчиняется протоколу для дерева, если за исключением первого заблокированного элемента нельзя заблокировать никакой другой элемент, пока не будет разблокирован родительский узел.
Терема: Любое расписание транзакций, подчиняющееся протоколу для дерева, сериализуемо.
Пример: : LOCK A
: LOCK B
LOCK D
UNLOCK B
LOCK B
LOCK C
: LOCK E
UNLOCK D
LOCK F
UNLOCK A
LOCK G
UNLOCK C
UNLOCK E
LOCK E
UNLOCK F
UNLOCK B
UNLOCK G
UNLOCK E
o
A
B o o C
D o o E
F o o G
FIRST( ) – первый из элементов, блокируемых транзакцией .
FIRST( ) = A FIRST( ) = B FIRST( ) = E
Обе транзакции
и
блокируют В, причём первой это делает
.
Строим
.
и
блокируют Е, первой это делает
:
.
Отсюда существуют две последовательности
расписаний:
,
,
и
,
,
.
Алгоритм проверки сериализуемости расписания.
Алгоритм построения последовательности транзакций начинается с создания узла в графе для каждой транзакции.
Пусть
и
– транзакции, которые блокируют один
и тот же элемент (в разное время). Пусть
FIRST(
)
– первый из элементов, блокируемых
транзакцией
.
При независимости FIRST(
)
и FIRST(
)
(ни один не является потомком другого),
протокол для дерева гарантирует, что
и
не блокируют общего узла и
и
.
Если FIRST(
)
является предком FIRST(
),
то: если
блокирует FIRST(
)
перед тем как это делает
,
строим
;
в противном случае
.
Пример: {продолжение}