D3 Reference Manual

Index | Help

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

Разделы / Общие сведения / files

files

Принципы размешения данных в файлах

Файлы хранятся на диске в виде блоков, называемых "фреймами" (frames).

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

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

Фреймы в группе явно связаны между собой. Записи распределяются между различными группами файла на основе алгоритма "хеширования" (hashing algorithm), который вычисляет идентификационный номер (fid) первого фрейма группы. Записи распределяются псевдослучайно между группами и последовательно внутри групп. Псевдослучайность (quasi-randomness) достигается путем прямого использования идентификатора записи (item-id) в алгоритме хеширования. Вследствие природы математических выражений, описывающих алгоритм хеширования, НЕ следует задавать значения "модуло", кратные 2 или 5.

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

Это средство повышает эффективность системы за счет уменьшения вероятности того, что двум или более пользователям понадобится одновременное обращение к одной и той же группе. Это достигается благодаря используемому алгоритму распределения данных между группами.

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

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

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

Если более 50 процентов групп содержат более одного фрейма или степень использования падает ниже 50 процентов, необходимо реорганизовать файл.

Один грубый метод изменения размера файла состоит в следующем:

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

Изменяя размер файла таким образом, пользователь должен явным образом скопировать индекс и прочие данные из "Записи описания файла" (File Defining Item) старого файла в "Запись описания файла" нового файла прежде, чем переименовывать все индексные вызовы и вызовы подпрограмм из старого файла.

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

"f-resize" - это программа, поставляемая с системой для автоматического вычисления новых "модуло" и проставления соответствующих значений в атрибут 13 на основе текущих статистических данных в файле "file-of-files", полученных в ходе последнего копирования файла (file-save).