Смекни!
smekni.com

Объектно-ориентированная СУБД прототип (стр. 9 из 12)

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

Состояние пользовательских транзакций на объектах

Каждый объект O в системе хранит состояние каждой пользовательской транзакции в системе. Состояние пользовательской транзакции (т.е. операции на DBIO) может принимать одно из следующих значений:

Никогда не активировалась(Never Activated)
Любая пользовательская транзакция, которая не воздействовала на O прямо или косвенно, находится в этом состоянии на O. Это эквивалентно тому, что не имеется никакой информации о пользовательской транзакции в O.

Завершена (Completed)
Пользовательская транзакция находится в состоянии Завершена на O, если операция вызванная ей на O закончила выполнение всех своих шагов.

Находится в точке проверки (Chekpoint)
Пользовательская транзакция не произвела никаких действий с тех пор, как оказалась в точке проверки.

Задержана для проверки (BlockedForCheckPoint)
Пользовательская транзакция ожидает выполнения условий, которые будут удовлетворять переводу ее в Точку проверки.

Выполняется (Executing)
Пользовательская транзакция выполняется на O, если операция op(O), вызванная этой транзакцией выполняется.

Рис 4: Диаграмма переходов транзакции из состояния в состояние

Таблица 4: Пример изменения состояния транзакции при ее выполнении

Действия Новое состояние транзакции
Никогда не активировалась
Объект O получил запрос на выполнение op(O) впервые для транзакции Tr(op(O)) и op(O) начинает выполняться Выполняется
Операция транзакции достигла описанной для нее точки проверки, все остальные активные операции на O "никогда не активировались" в точке проверки Находится в точке проверки
Операция транзакции достигла описанной для нее точки проверки, но активные операции не находятся в своих точках проверки Блокирована для точки провер­ки
Tr(op(O)) закончила все свои шаги Завершена

Таким образом, если объект имеет точки проверки, описанные для своих операций, то операции встречаются (рандеву) в точке проверки. Если операции в точке проверки произведены успешно, то в будущем нет необходимости любой операции откатываться (rollback) за точку проверки.

Шаги протокола согласованного управления

1. Операция запрошена (requested)

2. Операция вызывает другую операцию

3. Вызванная операция возвращается

4. Операция завершена

5. Точка разрыва (breakpoint) достигнута

6. Точка проверки (checkpoint) достигнута

7. В точке проверки получено сообщение

Детально алгоритм выполнения шагов описан в [19].

4. Представление данных в ООБД

4.1 Базовые объекты системы

Системе известны следующие базовые объекты: ROOT, FAIL, NULL, SAME, ATOMIC, INT, STR, DATIME, BIO, AGG, SET, SEQ.

1. ROOT – корень – предок всех объектов. Данных не имеет.

2. FAIL, копия ROOT – возвращается, если при воздействии произошла ошибка.

3. NULL, копия ROOT – объект-заменитель при отсутствующем значении. Эта проблема возникла недавно, но в теории реляционных баз данных пока не нашла приемлемого решения. Суть проблемы заключается в том, что при вводе данных, некоторые из них могут отсутствовать (например, не известен год рождения), поэтому нельзя сказать, чему они в точности равны. В некоторых случаях нуль может являться значением, для этого и вводится специальное обозначение (NULL).

4. SAME, копия ROOT – объект, позволяющий создавать копии. Он означает, что для взаимодействующего с ним объекта создается копия.

5. ATOMIC – предок всех атомарных объектов. Задает для них основные методы поведения.

6. INT – целое.

7. STR – строка.

8. DATIME – дата и время

9. BIO – условный объект

10.AGG – агрегат

11.SET – множество

12.SEQ – последовательность

4.2 Строение объекта

Каждому объекту выделяется персональное виртуальное пространство. Объект предваряется заголовком. За заголовком следуют виртуальные пространства данных и журнала. Каждый объект имеет уникальный идентификатор в пределах системы.

Таблица 5: Заголовок объекта (все поля 32-битные)

Поле Семантика
OID Идентификатор объекта (уникальный в пределах системы)
OBJBHR Идентификатор объекта-поведения (методы)
OBJKH Идентификатор объекта-действия
TRCOOBJ Идентификатор транзакционного сообъекта
VALUE Адрес заголовка вложенного канала, хранящего значение
HISTORY Адрес заголовка вложенного канала, хранящего историю изменений

Блок данных объекта

Атомарный объект хранит внутри блока данных свое значение.

Объект-условие хранит внутри блока данных три идентификатора в следующем порядке: идентификатор методаусловия, идентификатор метода, выполняемого, если условие выполнено («истина») и идентификатор метода, выполняемого, если условие не выполнено ( «ложь»).

У объектов агрегат, список и множество первое слово блока данных – размер элемента. Для списка и множества он равен 4. Для агрегата – 12.

Элементом списка и множества является идентификатор объекта. Элементом агрегата является кортеж:

· идентификатор объекта-значения (он обязательно является потомком объекта-образца)

· идентификатор поля (FID)

· идентификатор объекта-образца

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


Таблица 6: Строение данных для DATIME

Длина в байтах Значение
2 Год
1 Месяц
1 День
1 Час
1 Минуты
1 Секунды
2 Доли секунд

Такая структура журнала позво­ляет фиксировать изменения не только данных, но и поведений, knowhow…

Таблица 7: Структура записи изменений во внутреннем журнале объекта

Число байт Значение
4 Номер транзакции
2 Адрес размещения в заголовке
4 Замененное значение
2 Год
1 Месяц
1 День
1 Час
1 Минуты
1 Секунды
2 Доли секунд

Информация о транзакциях в системе

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

Таблица 8: Структура транзакционного сообъекта (агрегата)

Имя поля Значение
DSL Множество локальных зависимостей
DSI Множество унаследованных зависимостей
DSR Множество приобретенных зависимостей
DS Множество зависимостей

Множество зависимостей получается объединением множеств локальных, уна­сле­дованных и приобретенных зависимостей. Каждый элемент какого-либо из этих мно­жеств зависимостей – пара номеров транзакций (Ti,Tj). Если трактовать это мно­жест­во как множество ребер графа, в кото­ром вершины – номера транзакций, а реб­ра – зави­симости между транзакциями, то наличие цикла в графе означает некор­рект­ное выпол­нение транзакций.

В целях упрощения решено отказаться от таблицы конфликтов. Таблица кон­флик­тов описывает какие операции конфликтуют между собой, т.е. может ли выпол­нять­ся операция A, если в данных момент выполняется операция B. Ячейка таблицы может принимать одно из трех значений: «Конфликтует», «Не конфликтует», «Неизвестно». Значение «Неизвестно» вводится по причине наличия механизма позднего связывания, при котором заранее не известно, конфликтуют ли операции.

Транзакции и объекты-поведения

Объекты поведения представляют собой множество объектов, поле OBJKH кото­рых хранит идентификатор выполняемого действия. Это множество имеет ширину эле­мента не 4, как обычное множество, хранящее данные, а 8. В следующих четырех бай­тах может храниться идентификатор списка – строки таблицы чередований в точках разрыва (части подсистемы транзакций). Таблица чередований образуется из точек раз­рыва и группировки спецификаций для объекта. Она позволяет определить: в каких точ­ках разрыва каких операций можно переключиться на выполнение операции, соответ­ствующей этой строке таблицы чередований. Это статическая информация, ко­торая может быть сформирована перед началом работы системы. Элемент строки та­блицы чередований состоит из 2 значений: идентификатора операции и иденти­фикатора мно­жества, хранящего номера точек разрыва.