НазадСУБД D3
Введение в D3
D3 – это мощная, эффективная и компактная система управления многомерными базами данных. Она включается в себя специализированную систему хранения данных, язык выборки данных, несколько командных процессор, спулер, компилятор FlashBasic и ряд других модулей.
Основные принципы, необходимые для понимания функционирования D3:
D3 – это постреляционная СУБД. Сравнение терминологии D3 с обычными реляционными СУБД представлено в таб. 1.
Таб. 1
Понятия D3 |
Реляционные СУБД |
Счёт |
База данных |
Файл |
Таблица |
Запись |
Строка таблицы |
Минимальной идентифицируемой единицей данных является значение. Значения хранятся в структуре, называемой атрибутом (полем). Атрибут может содержать 1 значение, несколько значений или ни одного значения.
Каждая запись характеризуется идентификатором записи – имя файла, т к в пределах 1 файла имя записи уникально.
Группа атрибутов образует запись.
Каждый файл имеет свой словарь.
Словарь – это специальный файл, кот может содержать описатели атрибутов соответствующих файлов данных.
Описатели атрибутов, содержат информацию о том, как обрабатывается тот или иной атрибут и что он означает (позже будет приведен пример описателей атрибутов).
Словарь обладает возможностями, которые позволяют :
- преобразовывать значение при вводе в компактную внутреннюю форму и выполнять обратное преобразование при его выводе ;
- ссылаться на значение , которое находится в другом атрибуте , другой записи или другом файле ;
- логически связывать значение с другим значением из другого атрибута ;
- выполнять подпрограмму FlashBASIC при каждом обращении к значению
Доступ к записям файла
Доступ к записям , хранящимся в файле ,осуществляется различными способами , а именно :
- Непосредственно, используя идентификатор записи в качестве ключа.
- С сортировкой по одному или нескольким полям.
- По индексу.
Для просмотра записей (вручную) как правило, используется update процессор.
Еще один способ доступа к записи – это доступ по индексу.
Индекс создается командой create-index
Схема индексации предполагает использование отдельных небольших файлов,
содержащих только ключи и указатели. Индексные файлы D3 всегда
отсортированы и организованы в виде сбалансированного дерева или В - .дерева что позволяет свести к минимуму время поиска .
Индексы корректируются системой автоматически в процессе эволюции базы данных . То есть если запись удаляется, то все индексные элементы, указывающие на эту запись удаляются автоматически.
Внутренняя структура записи:
В D 3 эффективно используется дисковое пространство. Данные хранятся максимально экономно - хранятся только символы , представляющие собственно данные , а для разделения полей и записей используются специальные символы - разделители.
В D 3 используется концепция групп, которая определяется как разбиение линейного пространства, предназначенного для хранения данных, на одинаковые по размеру блоки. Для того , чтобы хеширование было эффективным, количество групп в файле должно представляться обязательно простым числом. В результате хеширования запись помещается в определенную группу. Когда запись добавляется в файл, она помещается в конец цепочки записей , уже находящихся в этой группе . Когда группа ( ) переполняется, к ней, по мере необходимости, присоединяются дополнительные фреймы.
Хеширование - это внутренняя функция , выполняющая математическое
вычисление адреса записи на основе ее ключа.
Добавление записи
Используя алгоритм хеширования, система определяет группу, в которую
должна быть добавлена запись, и начинает эту группу просматривать в поиске
свободного места. Если запись с таким именем уже существует в группе, то
система сообщает об этом. Если система находит свободное место, то она
помещает туда запись. Если в процессе поиска достигнут конец группы, или
свободного пространства в группе недостаточно для добавления записи, то D 3
увеличивает размер группы, присоединяя к ней дополнительный фрейм из
области переполнения. Затем запись добавляется к группе. Записи всегда
добавляются в конец группы или в конец цепочки фреймов переполнения.
Таким образом, каждая группа потенциально представляет собой цепочку
связанных фреймов.
В идеале фрэймов переполнения быть не должно, посколько когда таких фрэймов становится много, это начинает тормозить работу системы, поскольку данные как бы разбросаны, к тому же всегда хранится в фрэйме ссылка на фрэйм – продолжение и при различных сбоях (отключение питания, проблемы с жестким диском и эта связка может теряться), поэтому периодически в рамках обслуживания системы мы делаем вам так называемый resize. Заключается resize в том, что мы смотрим текущее модуло (размер файла во фрэймах) (u dict codbar codbar 3-ий атрибут), смотрим сколько реально фрэймов используется (командой group имя_файла) и корректируем модуло.
Удаление записи
Используя алгоритм хеширования , система определяет группу , в которой
должна находиться удаляемая запись , и начинает просматривать эту группу , а
также связанные с ней фреймы переполнения , пока не будет найдена требуемая
запись . Если такой записи не существует , система сообщит , что запись не
найдена . Если запись найдена , то она удаляется , а все следующие за ней в
группе записи сдвигаются , чтобы ликвидировать образовавшийся промежуток .
Если в результате сдвига фрейм переполнения становится пустым , то он
отсоединяется от группы и возвращается в область переполнения .
Подитог
Структура словарей D3, организация файлов
Файлы могут содержать любое количество записей и автоматически
расширяются до любых размеров. При создании файла необходимо учитывать ,
сколько записей в нем будет храниться и каков средний размер записи . При
создании файла под него на диске выделяется определенное пространство в
виде цепочки смежных фреймов .
Каждый файл в D3 состоит из 2-х частей:
- Раздел данных, где находится информация
- Словарный раздел, в кот.описывается как данные должны быть представлены при выводе и как они должны обрабатываться
Эти специальные структуры данных , предназначенные для описания атрибутов и значений внутри атрибута называются записями - определителями атрибута и хранятся в словаре файла
Пример:
Sortc dict codbar
Codbar – совпадает с названием файла – описатель раздела данных
Остальные – описатели атрибутов.
Пример описателя атрибутов:
:u dict codbar liv
01 a – признак того, что это описатель атрибутов
02 1 – номер атрибута, который мы будем брать из записей файла codbar
03 livre_name
04
05
06
07
08 tlivre;x;1;1 - получить значение атрибута из другого или текущего файла (x – только д ля вывода)
09 L
10 70
:u dict codbar codbar
DICT codbar 'codbar' size = 37
01 a
02 0
03 Shtrihkod
04
05
06
07
08
09 L
10 70
команда list codbar cod liv
Использование корреляции позволяет взаимодействовать с другими атрибутами для выдачи итоговой информации.
Иерархия файловой системы D3:
- Уровень 0 – системный словарь
- Уровень 1 – главный словарь
- Уровень 2 – словарь файла данных
- Уровень 3 – файл данных
Системный словарь (Уровень 0)
Системный словарь, файл mds, содержит информацию о том, какие в системе есть счета и где они находятся. Существует только один системный словарь.
Он может содержать:
- Записи-определители файлов
- Записи-определители атрибутов
- Записи-определители синонимов (Q-указатели на счета)
Записи – определители файлов
В системном словаре записи-определители файлов определяют все главные словари (счета), существующие в системе. (u mds *)
Q-указатели на примере u mds phoenix
Главный словарь (Уровень 1)
Каждый счет в D3 имеет свой собственный главный словарь. Он содержит:
- Записи-определители ( словарных разделов файлов )
- Записи-определители синонимов файла (Q-указатели на файлы)
- Глаголы
- Процедуры PROC
- Указатели на каталогизированные BASIC – программы
- Макрокоманды (m, n)
В кажд. счете содержится только 1 главный словарь.
В главном словаре (md) записи-определители файлов определяют словарные разделы файлов данных. (u md livre)
Словарь файла данных (Уровень 2)
Файл данных состоит из двух разделов: словарного раздела и раздела данных.
Словарный раздел содержит указатели на связанные с ним разделы данных этого файла. Он также содержит информацию, описывающую структуру данных в разделе данных файла. Словари файла данных могут содержать:
- Записи-определители атрибутов
- Записи-определители синонимов
- Объектный код FlashBasic
Один словарь может использоваться несколькими разделами данных.
В словаре файла записи-определители файлов определяют разделы данных файла (u dict codbar codbar)
Раздел данных (Уровень 3)
Эти разделы файлов содержат реальные данные, вводимые пользователем.
Основные команды TCL, Access
- Пользователи (u users *)
- Войти в счет
TO имя_счета - LF
- SORTC имя_файла
- COUNT имя_файла
- LIST
- SELECT ИМЯ ФАЙЛА1 IF УСЛОВИЕ
SAVE-LIST
NSELECT ИМЯ ФАЙЛА2 – ВЫБОР ЗАПИСЕЙ, КОТ ЕСТЬ В ФАЙЛ1 И НЕТ В ФАЙЛ2 - OFF
- TERM-TYPE
- WHO
- LU
- WHICH
- SET-FILE
- COMPILE
- CATALOG
- SET-DEVICE
- T-REW
- T-DET
- MESSAGE
- CREATE-FILE
- DELETE-FILE
- CLEAR-FILE
- DELETE ИМЯ_Ф ИМЯ_ЗАПИСИ
- COPY
Управляющие команды
Ctrl D
Ctrl A
CTRL R
<CTRL> <BREAK> - ВХОД В РЕЖИМ ОТЛАДКИ
Основные операторы PickBasic
1.
FOR ПЕРМЕН = НАЧ.ЗНАЧ TO КОНЕЧН. ЗНАЧ.
END ELSE
END
2. OPEN “ИМЯ_ФАЙЛА” TO ПЕРЕМЕННАЯ_Ф
3. READ ПЕРЕМЕННАЯ FROM ПЕРЕМЕННАЯ_Ф,ID_ЗАПИСИ
4. WRITE ПЕРЕМЕННАЯ ON ПЕРЕМЕННАЯ_Ф,ID_ЗАПИСИ
5. EXECUTE ‘SELECT ИМЯ_ФАЙЛА IF УСЛОВИЕ’
6.
READNEXT ПЕРЕМЕННАЯ ELSE ДЕЙСТВИЕ
REPEAT
7. ROOT "ИМЯ_ФАЙЛА","a8" TO ПЕРЕМЕННАЯ ELSE ДЕЙСТВИЕ
KEY('n', ПЕРЕМЕННАЯ,ПЕРЕМЕННАЯ1,ПЕРЕМЕННАЯ2)