The UNESCO micro CDS/ISIS Software
Записи документов являются записями переменной длины, содержащими три части: головная часть фиксированной длины, оглавление, и поля данных переменной длины.
Головная часть содержит следующие 7 целых (поля, отмеченные * являются 31-битовыми целыми со знаком):
MFN * Номер файла документов (МFN);
MFRL Длина записи (всегда одинаковое число);
MFBWB * Обратный указатель - номер блока;
MFBWP Обратный указатель - смещение;
BASE Смещение для переменных полей (это комбинированная длина головной части и оглавления записи в байтах);
NVF Число полей в записи (т. е. вхождений в оглавление);
STATUS Индикатор логического удаления (0 = запись действительна, 1=запись отмечена для удаления).
MFBWB и MFBWP первоначально установлены в 0, когда запись создается. Впоследствии они обновляются каждый раз, когда сама запись обновляется (смотри ниже).
Оглавление - это таблица указывающая на содержимое записи. Имеется одно вхождение в оглавление для каждого поля, представленного в записи (т. е. оглавление имеет точно ЧПЗ вхождений).
Каждое вхождение в оглавление состоит из 3 целых чисел:
TAG Метка поля;
POS Смещение позиции первого символа поля в части переменного поля (первое поле имеет POS=0);
LEN Длина поля в байтах;
Общая длина оглавления в байтах является, таким образом, 6*NVF; поле BASE в головной части всегда: 18+6*NVF.
Эта часть содержит поля данных (в порядке, указанном в оглавлении). Поля данных размещены одно за другим без разделительных символов.
Первая запись в главном файле является управляющей, ее система устанавливает автоматически. Это никогда не доступно пользователю ISIS. Ее содержание следующее (поля, отмеченные * являются 31-битовыми целыми со знаком):
CTLMFN * всегда 0;
NXTMFN * MFN назначен следующей создаваемой записи в базе данных;
NXTMFB * Номер последнего блока, расположенного в файле документов (первый блок равен 1);
NXTMFF Смещение следующей доступной позиции в последнем блоке;
METYPE Всегда 0 для данных пользователя (1 для файлов системных сообщений).
Записи файла документов записываются последовательно, одна за другой, каждая запись занимает точно MFRL байт. Файл записывается физическими блоками в 512 байт. Запись может начинаться на границе любого слова между 0-498 (ни одна запись не начинается между 500-510) и может продолжаться на втором и более блоках.
Так как файл документов создается и/или обновляется, система устанавливает индекс, указывающий позицию каждой записи. Индекс записывается в файле перекрестных ссылок (.XRF).
Файл XRF организован, как таблица указателей на файл документов. Первый указатель соответствует MFN1, второй - MFN2 и т. д.
Каждый указатель
RECCNT *
MFCXX1 *
MFCXX2 *
MFCXX3 *
состоит из двух полей:
XRFMFB (21 бит) Номер блока файла документов, содержащего запись
XRFMFP (11 бит) Смещение в блоке позиции первого символа записи (первая позиция блока равна 0)
которые записаны в 31-битовом целом со знаком (4 байта) следующим образом:
указатель = XRFMFB*2048+XRFMFP
(таким образом, дающий максимальный размер файла документов в 500 Мегабайт).
Каждый блок файла XRF имеет 512 байт и содержит 127 указателей. Первое поле каждого блока (XRFPOS) является 31-битовым целым со знаком, имеющим абсолютное значение номера блока XRF. Отрицательный XRFPOS указывает на последний блок.
Удаленные записи указываются следующим образом:
XRFMFB 0 XRFMFP 0 логически удаленная запись (в этом случае ABS (XRFMFB) является точный указатель блока и XRFMFP является смещением записи, которая таким образом еще может быть восстановлена).
XRFMFB=-1 XRFMFP=0 физически удаленная запись.
XRFMFB=0 XRFMFP=0 несуществующая запись (все записи за самым большим MFN, присвоенным в базе данных)
Новые записи всегда добавляются в конец файла документов, с позиции, указанной в полях NXTMFB/NXTMFP в управляющей записи файла документов. MFN, который будет назначен, также берется из поля NXTMFN в управляющей записи.
После добавления записи, NXTMFN увеличивается на 1 и NXT-MFB/NXTMFP обновляются на место следующей доступной позиции. При добавлении новый указатель в файле XRF и поле XRFMFP соответствует создаваемой записи, увеличенной на 1024, что указывает на необходимость инвертирования новой записи (после инвертирования новой записи, 1024 вычитается из XRFMFP).
Если вы обновляете запись (т. е. вы вызываете ее при вводе данных и выходите с помощью опции Х из редактора), система записывает запись обратно в файл документов, где запись зависит от статуса записи, которая была первоначально прочитана.
1. Попытка обновить запись не инвертированного файла
Это условие указывается следующим:
В XRF XRFMFP<512 и
В MST MFBWB=0 и MFWBP=0
В этом случае, запись всегда переписывается в конец файла документов (так, если бы это была новая запись), что указывается NXTMFB/NXTMFP в управляющей записи. В новой версии записи MFBWB/MFBWP устанавливаются на место старой версии записи, пока в файле XRF указатель не укажет на новую версию. При добавлении, 512 добавляется к XRFMFP, что указывает на необходимость обновления инвертированного файла. Когда инвертированный файл будет обновлен, старая версия записи будет определена к удалению, а новая версия будет добавлена к новому отправлению. После обновления инвертированного файла, 512 будет вычтено из XRFMFP, а MFBWB/MFBWP будут установлены в 0.
2. Попытка обновить инвертированный файл
Это условие указывается следующим:
В XRF XRFMFP 512 и
В MST MFBWB 0
В этом случае MFBWB/MFBWP указывают на версию записи, которая в настоящий момент отражена в инвертированном файле. Если возможно, т. е. если длина записи не увеличивается, запись будет записана обратно на старое место, иначе - в конец файла. В обоих случаях, MFBWB/MFBWP не меняются.
Удаление записи аналогично обновлению, со следующими дополнительными особенностями:
В XRF XRFMFB отрицательно
В MST STATUS установлен в 1
Как указано выше, записи главного файла обновляются, увеличивая размер файла MST, и это приводит к потере пространства в файле, которое не может быть использовано. Реорганизация позволяет использовать это пространство, исправив файл с помощью
пеpекомпановки.
Во время фазы сброса файла документов создается файл сброса (.ВКР). Структура и формат этого файла такой же как и в файле (.MST), исключая то, что файл перекрестных ссылок не запрашивается, так как все записи соседствуют.
Записи, отмеченные для удаления, не сбрасываются. Поэтому только последняя копия каждой записи сбрасывается, система не позволяет вам выполнить сброс, если инвертированный файл не обновлен для одной или более записей.
Во время фазы восстановления, файл сброса последовательно читается и программа воссоздает файлы MST и XRF. В этом месте все записи, которые отмечены для логического удаления (до сброса), вновь отмечаются, как физически удаленные (установкой XRFMFB=-1 и XRFMFP=0). Удаленные записи обнаруживаются проверкой пропусков в нумерации MFN.
Всі права захищено ©
2013 - 2024 Національна бібліотека України імені В. І. Вернадського
Працює на Drupal | За підтримки OS Templates
Ми в соціальних мережах