НАЧАЛО >> Нативный провайдер данных DP_Irbis64Native >> Формат файла .xrf (Файл перекрестных ссылок ИРБИС64)📄 Скачать в DOCX
Файл .xrf (Cross-Reference file) — это индексный файл, служащий мостом между номером записи в базе (MFN) и её физическим расположением (байтовым смещением) внутри файла данных .mst.
Обращение к .xrf позволяет базе данных осуществлять мгновенный доступ к любой записи по её MFN без необходимости сканировать весь мастер-файл .mst с самого начала.
Файл представляет собой простой массив фиксированных структур (TNew_Xrf). Номер записи в базе (MFN) выступает прямым индексом в этом массиве.
Размер одной структуры составляет 12 байт.
Физическое смещение до конкретного MFN в файле .xrf вычисляется по формуле:
Смещение = (MFN - 1) * 12
(Примечание: Запись с MFN = 1 располагается в самом начале файла по смещению 0).
Все 32-битные бинарные числовые значения в файле записываются на диск в формате Big-Endian (Network byte order, старший байт по меньшему адресу).
64-битные значения (структура TInt64) записываются в виде двух 32-битных Big-Endian чисел: сначала младшие 4 байта (LowWord), затем старшие 4 байта (HiWord).
| Поле | Тип | Размер | Описание |
|---|---|---|---|
nxt |
TInt64 (struct) |
8 байт | Абсолютное байтовое смещение в файле .mst. Указывает строго на начало маркера/лидера записи (Tlider) актуальной версии этой записи. Структура состоит из LowWord (4 байта) и HiWord (4 байта). |
xrf_flags |
int |
4 байта | Битовые флаги статуса записи. |
Биты статуса хранят критически важную информацию о текущем состоянии MFN. База данных проверяет этот статус перед любыми операциями чтения, изменения или поиска:
1 (BIT_LOG_DEL) — Логически удалена. Запись помечена как удаленная, но её данные всё ещё хранятся в .mst и могут быть восстановлены.2 (BIT_PHYS_DEL) — Физически удалена. Данные записи вычищены из .mst (или будут вычищены при сжатии базы), MFN может быть переиспользован или остается "мертвым".4 (BIT_ABSENT) — Отсутствует (Пустая запись). Смещение в .mst недействительно, запись по этому MFN никогда не создавалась или была полностью затерта.8 (BIT_NOTACT_REC) — Неактуализирована. Запись была добавлена или изменена, но словарь (инвертированный файл: .ifp, .l01, .n01) для неё еще не перестроен. По этой записи нельзя производить поиск до момента актуализации.64 (BIT_LOCK_REC) — Заблокирована. Запись в данный момент редактируется пользователем (или процессом) и недоступна для изменения другими клиентами (Record Lock / Pessimistic Locking).128 (AUTOIN_ERROR_FLAG) — Произошла ошибка исполнения autoin.gbl (глобальной корректировки при сохранении).256 (BIT_NOTACT_FULLTEXT_REC) — Неактуализированный полный текст. (Дополнительный бит для очередей индексации полнотекстовых баз в ИРБИС64+).Когда к системе поступает запрос на чтение записи (например, MFN 50), ядро вычисляет смещение (50 - 1) * 12 = 588, переходит по 588-му байту в файле .xrf и считывает оттуда 12 байт. Если флаги не указывают на то, что запись физически удалена или отсутствует, ядро берет 64-битное смещение nxt, переходит по нему в файл .mst и считывает Tlider записи.