Разработка прототипа системы управления объектно-ориентированной базой данных
Рефераты >> Программирование и компьютеры >> Разработка прототипа системы управления объектно-ориентированной базой данных

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

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

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

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

4.3 Контекст транзакции

В системе есть объект DBIO (Database User-Intarface Object), которому известны состояния всех транзакций. Этот объект представляет собой множество, элементами которого являются объекты-агрегаты, описывающие контекст транзакции.

Таблица 9: Контекст транзакции

Имя поля

Размер в байтах

Значение

TR_MESS

4

OID сообщения

TR_KH

4

OID knowhow

TR_PARAM

4

OID агрегата с параметрами

TR_TARGET

4

OID целевого объекта сообщения

TR_RES

4

OID результата

TR_STACK

4

OID стека

TR_N

4

Номер транзакции

TR_HOSTN

4

Номер вызвавшей транзакции

TR_STATUS

1

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

TR_POINT

2

Точка разрыва, в которой находимся

Для каждой транзакции выделяется свой стек. Механизм сохранения и вос­ста­нов­ления стеков описан в [7]. Стеки сохраняются в атомарных объектах.

5. Описание операций над объектами в БД

[] DB.NEW [] -- создать новую БД

[] DB.OPEN [] -- открыть БД

[] DB.CLOSE [] -- закрыть БД

Операции клонирования:

[oid] CLONE [oid'] -- клонировать объект

[] CLONE_ROOT [oid'] -- Создать объект от "Корень"

[int] CLONE_INT [oid'] -- Создать объект "Целое"

["string"] CLONE_STR [oid'] -- Создать объект "Строка"

["string"] CLONE_AGG [oid'] -- Создать объек-агрегат

[oid_if oid_then oid_else]

CLONE_BIO [oid'] -- Создать объект-условие

[] CLONE_SET [oid'] -- Создать объект-множество

[] CLONE_SEQ [oid'] -- Создать объект-последовательность

OIDROOT, OIDINT, OIDAGG, …, OIDSEQ -– Узнать идентификаторы соотв. Объектов

[oid_bhr] SET_BHR [] -- переопределить поведение

[] GET_BHR [oid] -- узнать поведение

[oid_kh] SET_KH [] -- переопределить действие

[] GET_KH [oid] -- узнать действие

[oid] GET_INT [int] -- Получить целое число из объекта-целого

[int oid] SET_INT [] -- Занести целое число в объект-целое

[oid] PRINT_STR [] -- Печатать на экране содержимое строки

["string" oid] SET_STR [] -- Занести строку в объект-строку

[oid_super oid] SUPER+ [] -- наследовать данные из oid_super в oid

[oid] DELOBJ [] -- удалить объект

Операции над множеством:

[oid_el oid] SET+E [] -- добавить элемент в множество

[oid_el oid] SET-E [] -- удалить элемент из множества

[oid_el oid] SET?E [0/1] -- найти элемент в множестве

[oid1 oid] SET+ [] -- объединение

[oid1 oid] SET- [] -- разность

[oid1 oid] SET* [] -- пересечение

Операции над списком:

[oid_el n oid] SEQ+E [] -- добавить элемент в последовательность

[n oid] SEQ-E [] -- удалить n-й элемент из

последовательности

[oid_el oid] SEQ?E [0/n] -- найти позицию в последовательности

[n oid] SEQ?N [0/oid] -- определить oid n-го элемента послед-ти

Операции над агрегатом:

[fid oid_etalon oid] AGG+F [] -- добавить поле к объекту

[fid oid] AGG-F [] -- удалить поле из объекта

[fid oid] ETALON [oid] -- получить идентификатор объекта-эталона

[fid oid] FIELD [oid] -- получить идентификатор

объекта-значения

Операции над объектом-условием:

[oid] GET_BIO

[oid_else oid_then oid_if] -- Получить параметры объекта-условия

[oid_else oid_then oid_if oid]

SET_BIO [] -- Сохранить параметры объекта-условия

Специальные операции:

[oid_str oid] SET_NAMEOBJ [oid] -- именовать объект

[oid_str fid] SET_NAMEFID [fid] -- именовать поле

[oid_str] NAMEOBJ [oid] -- получить идентификатор по имени

[oid_str] NAMEFID [fid] -- получить идентификатор поля по имени

[oid_mess oid_par oid] SEND [] -- послать сообщение объекту

[oid_mess oid_obj] METHOD? [] -- определить идентификатор метода

[oid1 oid] CHIELD [1/0] -- определить, является ли oid1 потомком oid

[oid_kh] RUN_KH [] -- выполнить knowhow


Страница: