D3 Reference Manual

Index | Help

Поиск по страницам

Разделы / Общие сведения / Управление данными

Управление данными

Обзор концепции системы D3

Система D3 специально разработана для управления данными. Все данные в системе D3 хранятся в виде записей (items) в файлах (files). Записи файлов разделены на разделы, называемые атрибутами (attributes), каждый из которых может содержать одно или несколько значений (values) или быть пустым.

Если использовать термины, принятые в традиционных "табуляционных" моделях данных (перфокарты, пакетная обработка), записи системы D3 (items) можно было бы назвать записями (records), атрибуты - полями (fields), а идентификаторы записей (item-ids) - ключами записей (record keys). Записи, атрибуты и значения имеют переменную длину. Записи и атрибуты могут содержать несколько значений или набор значений, которые разделяются специальными ограничителями. Записи разделяются маркерами сегментов (шестнадцатеричный код 'FF', символ ASCII - "_"). Атрибуты разделяются маркерами атрибутов (шестнадцатеричный код 'FE', символ ASCII - "^"). Значения разделяются маркерами значений (шестнадцатеричный код 'FD', символ ASCII - "]"). Благодаря использованию ограничителей длина значений в атрибутах не должна быть больше, чем фактическая длина данных. Это дает системе D3 явное преимущество над традиционными системами, т.к. записи имеют переменную, а не фиксированную длину. Это не только увеличивает производительность за счет уменьшения времени доступа к диску при меньшем размере записей, но и значительно уменьшает объем базы данных на диске.

Традиционная терминология Терминология D3
Физический диск
Раздел Раздел
Кластер Фрейм
Блок Блок
Файловая система
Директория (каталог) Директория (каталог)
Файл Файл
Запись (главный ключ) Запись (идентификатор записи)
Поле (альтернативный ключ) Атрибут (индексный ключ)
Значения Значения

К записям файла можно обратиться несколькими способами:

  • прямо, используя идентификатор записи в качестве ключа
  • последовательно в последовательности хеширования
  • последовательно в последовательности сортировки
  • по индексному ключу

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

Словарные записи описания файлов (FDI) системы D3 позволяют задавать как простые, так и сложные преобразования и корреляции - в т.ч. с помощью кодов обработки типа "a". Указания для формирования индексных ключей задаются с помощью тех же самых кодов обработки типа "a". В любом файле может быть создано столько индексов, сколько требуется. Корневой идентификатор фрейма (root fid) и код обработки для каждого индекса хранятся в значении атрибута 8 ("Корреляция") записи FDI.

Индексы создаются при вводе команды "create-index" TCL и сохраняются на диске в алфавитном порядке в структуре "b"-дерева. При любом изменении файла индексы автоматически изменяются системой.

Если, например, удаляется запись, все индексные записи, указывающие на эту запись, также удаляются, и указатели переводятся на следующую запись.

Индексы могут использоваться в программах на языке FlashBASIC с помощью команд "key" и "root". Индексы используются также командами "list", "sselect" и "sort", если имеются индексы, соответствующие ключам сортировки.

Записи могут также обновляться программами на языке FlashBASIC и процессором обновления (UP) с помощью кодов обработки типа "мост" ("bridge").

Файлы хранятся на диске в виде блоков, называемых "фреймами". Фреймы имеют стандартный размер (1024 или 2048 байтов). Первичное файловое пространство (primary file space) физически состоит из непрерывной последовательности фреймов на диске. Начальный фрейм называется "базовым" фреймом, а количество непрерывных фреймов или групп (включая базовый фрейм) - это "модуло" (modulo) файла. Параметр "модуло" задается во время создания или изменения размера файла. Система автоматически добавляет фреймы к группам или изымает фреймы из групп по мере увеличения или уменьшения объема данных (количества и/или размера записей) в группе. Фреймы, автоматически добавляемые системой, добавляются к так называемому "вторичному файловому пространству" (secondary file space). Это означает, что пользователю не приходится самому изменять размер файла по мере увеличения или уменьшения объема данных в нем.

Рассмотрим пример файла, которому при создании было выделено 7 непрерывных фреймов в первичном файловом пространстве (модуло 7). По мере добавления записей в файл они размещались по группам в соответствии с алгоритмом хеширования. Некоторым группам требовались новые фреймы. Эти фреймы добавлялись из вторичного файлового пространства. Фреймы в группе были связаны между собой явными указателями.

            Первичное       Вторичное
            файловое        файловое
            пространство    пространство

              ------          ------
Группа 1     |      |------->|      |
              ------          ------

              ------ 
Группа 2     |      |
              ------ 

              ------          ------         ------         ------
Группа 3     |      |------->|      |------>|      |------>|      |
              ------          ------         ------         ------

              ------ 
Группа 4     |      |
              ------ 

              ------          ------
Группа 5     |      |------->|      |
              ------          ------

              ------ 
Группа 6     |      |
              ------ 

              ------          ------
Группа 7     |      |------->|      |
              ------          ------

Записи распределяются между группами файла в соответствии с алгоритмом хеширования, который вычисляет идентификатор (fid) первого фрейма в группе. Записи распределяются псевдослучайно между группами и последовательно внутри группы. Эта псевдослучайность достигается за счет прямого использования идентификатора записи в алгоритме хеширования. Из-за природы математической связи, составляющей суть алгоритма хеширования, значения "модуло", кратные 2 или 5, не должны присваиваться.

Для максимальной эффективности передачи данных на диск и с диска "модуло" файла должно быть равно ближайшему простому числу, превышающему число, при котором количество фреймов в группе было бы меньше единицы (издержка за однократное обращение к диску - использование памяти на диске на 50-75%), что зависит от предполагаемого объема памяти данных. Это увеличивает производительность системы, т.к. благодаря алгоритму распределения данных между группами уменьшается вероятность одновременного обращения к одной и той же группе двух или более пользователей.

Количество_записей * Средний_размер_записи / Размер_фрейма 

Средний размер записи и размер фрейма - в байтах.

Результат должен быть увеличен до следующего простого числа.

Размер фрейма в конкретной версии системы D3 можно выяснить с помощью команды "what" TCL. На первой строке отчета под заголовком "dfsize" печатается количество байтов фрейма, которое может быть использовано под данные. Фактический размер фрейма определяется путем округления числа "dfsize" до следующей степени числа 2. Фреймы, составляющие разницу между "dfsize" и фактическим размером фрейма, содержат "поля связи между фреймами" (т.е. указатели на следующий и предыдущий фреймы).

Если более 50 процентов групп содержат более одного фрейма или использование памяти на диске падает ниже 50 процентов, это означает, что файл необходимо реорганизовать. Один "грубый" способ реорганизации файла состоит из следующих шагов:

  1. Создание нового файла с нужным модуло.
  2. Копирование всех записей из старого файла в новый.
  3. Удаление старого файла.
  4. Переименование нового файла (изменение его имени на имя старого файла).

При реорганизации файла таким образом пользователь должен сам скопировать индекс и другие данные из старой записи FDI в новую запись FDI прежде, чем переименовывать все индексы и вызовы подпрограмм из старого файла.

Реорганизовывать файлы можно также с помощью команд "save" и "restore". Если используются команды "save" и "restore", индексы обрабатываются автоматически. Перед копированием системы на магнитный носитель в атрибуте 13 записи FDI можно задать новый параметр "модуло" для файла. Когда система восстанавливается, все файлы с новым модуло в атрибуте 13 реорганизуются согласно новому значению параметра. Если новый атрибут 13 не задан, файл восстанавливается в прежнем виде. Процесс копирования (save) и восстановления (restore) позволяет одновременно реорганизовать большое количество файлов.

Следует отметить, данные файлов копируются на ленту по группам. Т.к. при восстановление с новым параметром "модуло" происходит перераспределение записей в файловом пространстве, количество чтений диска во время восстановления с новым "модуло" значительно возрастает, что заметно замедляет процесс. Программа "F-resize", поставляемая с системой, автоматически вычисляет новые "модуло" и соответственно помечает атрибут 13 файлов на основе текущих статистических данных из файла "file-of-files", модифицированного во время последнего копирования файлов на магнитный носитель.