Индекс базы данных ИРБИС — различия между версиями
Sokv (обсуждение | вклад) м (переименовал «Структура инверсного файла и форматы записей» в «Инвертированный файл»)  | 
				Sokv (обсуждение | вклад)   | 
				||
| Строка 1: | Строка 1: | ||
| − | + | Инвертированный файл (также используется название ''инверсный файл'') используется в качестве ''индекса'' базы данных ИРБИС.  | |
| − | + | Пользователи системы ИРБИС для обозначения ''индекса'' базы данных используют термин [[Базы данных ИРБИС#Словарь базы данных ИРБИС (инвертированный файл)|''словарь'' базы данных]].  | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | + | Инвертированный файл строится с использованием [[Таблица выбора полей#ТВП для инвертированного файла|''ТВП для инвертированного файла'']].  | |
| − | |||
| − | + | ==Структура инвертированного файла==  | |
| − | + | ||
| − | |  | + | Инвертированный файл состоит из 3 физических файлов, два из которых содержат словарь поисковых терминов (в структуре бинарного дерева), а третий содержит список [[Таблица выбора полей#ТВП для инвертированного файла|индексных ссылок]], соответствующих каждому термину.  | 
| − | !Число бит  | + | |
| − | + | В бинарном дереве файл с расширением <tt>.n01</tt> содержит узлы дерева и файл с расширением <tt>.l01</tt> – листья. Записи с листьями указывают на файл ссылок <tt>.ifp</tt>.  | |
| − | + | ||
| − | |-  | + | Взаимосвязи между файлами <tt>.n01</tt> и <tt>.l01</tt> обеспечиваются ссылками, которые представляют собой относительные адреса соответствующих записей. Относительный адрес это порядковый номер записи в данном файле.  | 
| − | |32  | + | |
| − | |NUMBER  | + | Структура записи одинакова для <tt>.n01</tt> и <tt>.l01</tt> файлов. Размер (длина) записи зависит от реализации (512, 1024, 2048, 4096). Таким образом, максимальный размер файлов <tt>.l01</tt> и <tt>.n01</tt> определяется как 2 Гб * размер записи. В данной реализации размер записи 2048.  | 
| − | |номер записи(начиная с 1; в   | + | |
| − | |-  | + | Адрес корневой записи файла <tt>.n01</tt> сохраняется как номер первой записи.  | 
| − | |32  | + | |
| − | |PREV  | + | Смещение на запись в файле <tt>.ifp</tt> сохраняется в файле <tt>.l01</tt> и имеет длину 64 байта (в данной реализации используется только младшее слово этого смещения).  | 
| − | |номер предыдущей записи(если нет = -1)  | + | |
| − | |-  | + | ==Формат файлов <tt>.n01</tt> и <tt>.l01</tt>==  | 
| − | |32  | + | |
| − | |NEXT  | + | Файлы состоят из записей (блоков) постоянной длины. Записи состоят из трех частей: лидера, справочника и ключей переменной длины.  | 
| − | |номер следующей записи(если нет = -1)  | + | |
| − | |-  | + | Формат лидера записи:  | 
| − | |16  | + | {| class="standard"  | 
| − | |TERMS  | + |  !Число бит||Параметр||Описание  | 
| − | |число ключей в записи  | + |  |-  | 
| − | |-  | + |  |32||NUMBER||номер записи (начиная с 1; в <tt>.n01</tt> файле номер первой записи равен номеру корневой записи дерева)  | 
| − | |16  | + |  |-  | 
| − | |OFFSET_FREE  | + |  |32||PREV||номер предыдущей записи (если нет = -1)  | 
| − | |смещение на свободную позицию в записи (от начала записи)  | + |  |-  | 
| + |  |32||NEXT||номер следующей записи (если нет = -1)  | ||
| + |  |-  | ||
| + |  |16||TERMS||число ключей в записи  | ||
| + |  |-  | ||
| + |  |16||OFFSET_FREE||смещение на свободную позицию в записи (от начала записи)  | ||
|}  | |}  | ||
| − | Справочник это таблица, определяющая поисковый термин. Каждый ключ переменной длины, который есть в записи, представлен в справочнике одним   | + | Справочник это таблица, определяющая поисковый термин. Каждый ключ переменной длины, который есть в записи, представлен в справочнике одним вхождением следующего формата:  | 
| + | {| class="standard"  | ||
| + |  !Число бит||Параметр||Описание  | ||
| + |  |-  | ||
| + |  |16||LEN||длина ключа  | ||
| + |  |-  | ||
| + |  |16||OFFSET_KEY||смещение на ключ (от начала записи)  | ||
| + |  |-  | ||
| + |  |32||LOW||В <tt>.n01</tt> файле: ссылка на запись файла <tt>.n01</tt> (если LOW > 0) или файла <tt>.l01</tt> (если LOW < 0), у которых 1-й ключ равен данному.  | ||
| + | |||
| + | Положительное значение LOW определяет ветку индекса иерархически более низкого уровня. Самый низкий уровень индекса (LOW < 0) соответствует ссылкам на записи (листья) файла <tt>.l01</tt>.  | ||
| − | + | В <tt>.l01</tt> файле: младшее слово 8-байтового смещения на ссылочную запись в <tt>.ifp</tt>.  | |
| − | + |  |-  | |
| − | + |  |32||HIGH||В <tt>.n01</tt> файле: всегда 0.  | |
| − | |||
| − | |||
| − | |||
| − | |-  | ||
| − | |  | ||
| − | |||
| − | |  | ||
| − | |  | ||
| − | |  | ||
| − | |  | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | В   | ||
| − | |||
| − | |||
| − | В   | + | В <tt>.l01</tt> файле: старшее слово 8 байтового смещения на ссылочную запись в <tt>.ifp</tt>.  | 
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
|}  | |}  | ||
| − | Ключи переменной длины записываются  | + | Ключи переменной длины записываются начиная с конца записи, так что порядок входов, соответствующих им, определяется алфавитным порядком ключей. Сами ключи располагаются вплотную друг к другу без разделителей в порядке поступления на запись.  | 
* '''Длина справочника''' 12 * TERMS.  | * '''Длина справочника''' 12 * TERMS.  | ||
* '''Длина ключей''' = [Размер записи] – OFSET_FREE.  | * '''Длина ключей''' = [Размер записи] – OFSET_FREE.  | ||
* '''Размер свободного места в записи''' = 16 + 12 * TERMS - [длина ключей].  | * '''Размер свободного места в записи''' = 16 + 12 * TERMS - [длина ключей].  | ||
| − | * '''Размер записи''' зависит от реализации и может быть равен в байтах: 512   | + | * '''Размер записи''' зависит от реализации и может быть равен в байтах: 512, 1024, 2048, 4096.  | 
| + | |||
| + | ==Формат файла <tt>.ifp</tt>==  | ||
| + | |||
| + | Файл содержит список ссылок для каждого термина словаря.  | ||
| + | |||
| + | Список ссылок может быть представлен в 2-х различных форматах. Выбор формата размещения ссылок осуществляется при загрузке словаря из файла <tt>.lk1</tt> (этот файл формируется после отбора и сортировки терминов) в зависимости от общего числа ссылок для данного термина. Обыкновенный формат – это заголовок блока и набор упорядоченных ссылок. По превышении определенного числа ссылок (MIN_POSTINGS_IN_BLOCK – в данной реализации 256) формат включает специальный блок и набор блоков обыкновенного формата размер которых определяется по следующей схеме: блоки 4, 8, 16, 32 Кб для общего числа ссылок соответственно 256-32000, 32000-64000, 64000-128000, 128000 и более.  | ||
| − | |||
| − | |||
| − | |||
Такая схема оптимизирует работу с диском в процессе инвертирования записи в базах данных, характеризующихся большим количеством ссылок на термин.  | Такая схема оптимизирует работу с диском в процессе инвертирования записи в базах данных, характеризующихся большим количеством ссылок на термин.  | ||
| − | === Обыкновенный формат записи   | + | ===Обыкновенный формат записи <tt>.ifp</tt>===  | 
| + | |||
Запись состоит из заголовка и упорядоченного набора ссылок.  | Запись состоит из заголовка и упорядоченного набора ссылок.  | ||
| − | + | ||
| − | + | Ссылка имеет следующий формат:  | |
| − | |  | + | {| class="standard"  | 
| − | !Число бит  | + |  !Число бит||Параметр||Описание  | 
| − | + |  |-  | |
| − | + |  |32||PMFN||номер записи  | |
| − | |-  | + |  |-  | 
| − | |32  | + |  |32||PTAG||идентификатор поля, назначенный при отборе терминов в словарь  | 
| − | |PMFN  | + |  |-  | 
| − | |номер записи  | + |  |32||POCC||номер повторения  | 
| − | |-  | + |  |-  | 
| − | |32  | + |  |32||PCNT||номер термина в поле  | 
| − | |PTAG  | ||
| − | |идентификатор поля, назначенный при отборе терминов в словарь  | ||
| − | |-  | ||
| − | |32  | ||
| − | |POCC  | ||
| − | |номер повторения  | ||
| − | |-  | ||
| − | |32  | ||
| − | |PCNT  | ||
| − | |номер термина в поле  | ||
|}  | |}  | ||
| − | + | Заголовок имеет следующий формат:  | |
| − | + | {| class="standard"  | |
| − | |  | + |  !Число бит||Параметр||Описание  | 
| − | !Число бит  | + |  |-  | 
| − | + |  |32||LOW||младшее слово смещения на следующую запись (если нет  0)  | |
| − | + |  |-  | |
| − | |-  | + |  |32||HIGH||старшее слово смещения на следующую запись (если нет  0)  | 
| − | |32  | + |  |-  | 
| − | |LOW  | + |  |32||TOTP||общее число ссылок для данного термина (только в первой записи); число ссылок в данном блоке (в следующих записях)  | 
| − | |младшее слово смещения на следующую запись(если нет  0)  | + |  |-  | 
| − | |-  | + |  |32||SEGP||число ссылок в данном блоке  | 
| − | |32  | + |  |-  | 
| − | |HIGH  | + |  |32||SEGC||вместимость записи в ссылках  | 
| − | |старшее слово смещения на следующую запись(если нет  0)  | ||
| − | |-  | ||
| − | |32  | ||
| − | |TOTP  | ||
| − | |общее число ссылок для данного термина(только в первой записи); число ссылок в данном блоке(в следующих записях)  | ||
| − | |-  | ||
| − | |32  | ||
| − | |SEGP  | ||
| − | |число ссылок в данном блоке  | ||
| − | |-  | ||
| − | |32  | ||
| − | |SEGC  | ||
| − | |вместимость записи в ссылках  | ||
|}  | |}  | ||
| + | |||
Признак последнего блока – LOW = HIGH = -1  | Признак последнего блока – LOW = HIGH = -1  | ||
| − | === Специальный формат записи   | + | ===Специальный формат записи <tt>.ifp</tt>===  | 
| − | В этом случае первой записью является специальный блок, который представляет собой заголовок (обыкновенного формата), в котором смещения имеют специальные значения = -1001, и набор   | + | |
| − | {|  | + | В этом случае первой записью является специальный блок, который представляет собой заголовок (обыкновенного формата), в котором смещения имеют специальные значения = -1001, и набор вхождений следующего формата:  | 
| − | + | {| class="standard"  | |
| − | !Число бит  | + |  !Число бит||Параметр||Описание  | 
| − | + |  |-  | |
| − | + |  |32||POSTING||1-я ссылка из записи обыкновенного формата  | |
| − | |-  | + |  |-  | 
| − | |32  | + |  |32||LOW||младшее слово смещения на следующую запись (если нет  0)  | 
| − | |POSTING  | + |  |-  | 
| − | |1-я ссылка из записи обыкновенного формата  | + |  |32||HIGH||старшее слово смещения на следующую запись (если нет  0)  | 
| − | |-  | ||
| − | |32  | ||
| − | |LOW  | ||
| − | |младшее слово смещения на следующую запись (если нет  0)  | ||
| − | |-  | ||
| − | |32  | ||
| − | |HIGH  | ||
| − | |  | ||
|}  | |}  | ||
| − | Число   | + | Число вхождений кратно 4. Записи, на которые ссылается специальный блок связаны между собой как описано выше. Общее количество ссылок для данного термина сохраняется только в специальном блоке.  | 
| + | |||
| + | ===Модификация записей файла <tt>.ifp</tt>===  | ||
| − | + | При выполнении актуализации инвертированного файла могут создаваться новые дополнительные записи при добавлении новых ссылок. В этом случае создается новая запись размером, равным общему количеству ссылок, если нет специального блока, и размером, равным количеству ссылок в данной записи, если есть. Новая запись создается таким образом, чтобы не нарушалась возрастающая последовательность следования ссылок. Новая запись связывается с существующими через поле NXT_, ссылки распределяются равномерно между старой и новой записью.  | |
| − | При выполнении актуализации   | ||
==Ссылки==  | ==Ссылки==  | ||
| Строка 168: | Строка 129: | ||
См. также:  | См. также:  | ||
* [[Базы данных ИРБИС]]  | * [[Базы данных ИРБИС]]  | ||
| + | * [[Таблица выбора полей]]  | ||
Источники информации:  | Источники информации:  | ||
| Строка 175: | Строка 137: | ||
[[Категория:Базы данных ИРБИС]]  | [[Категория:Базы данных ИРБИС]]  | ||
[[Категория:Файлы ИРБИС]]  | [[Категория:Файлы ИРБИС]]  | ||
| + | [[Категория:Анонсированные статьи]]  | ||
| + | [[Категория:Последние анонсированные статьи]]  | ||
Версия 01:11, 21 декабря 2012
Инвертированный файл (также используется название инверсный файл) используется в качестве индекса базы данных ИРБИС.
Пользователи системы ИРБИС для обозначения индекса базы данных используют термин словарь базы данных.
Инвертированный файл строится с использованием ТВП для инвертированного файла.
Содержание
Структура инвертированного файла
Инвертированный файл состоит из 3 физических файлов, два из которых содержат словарь поисковых терминов (в структуре бинарного дерева), а третий содержит список индексных ссылок, соответствующих каждому термину.
В бинарном дереве файл с расширением .n01 содержит узлы дерева и файл с расширением .l01 – листья. Записи с листьями указывают на файл ссылок .ifp.
Взаимосвязи между файлами .n01 и .l01 обеспечиваются ссылками, которые представляют собой относительные адреса соответствующих записей. Относительный адрес это порядковый номер записи в данном файле.
Структура записи одинакова для .n01 и .l01 файлов. Размер (длина) записи зависит от реализации (512, 1024, 2048, 4096). Таким образом, максимальный размер файлов .l01 и .n01 определяется как 2 Гб * размер записи. В данной реализации размер записи 2048.
Адрес корневой записи файла .n01 сохраняется как номер первой записи.
Смещение на запись в файле .ifp сохраняется в файле .l01 и имеет длину 64 байта (в данной реализации используется только младшее слово этого смещения).
Формат файлов .n01 и .l01
Файлы состоят из записей (блоков) постоянной длины. Записи состоят из трех частей: лидера, справочника и ключей переменной длины.
Формат лидера записи:
| Число бит | Параметр | Описание | 
|---|---|---|
| 32 | NUMBER | номер записи (начиная с 1; в .n01 файле номер первой записи равен номеру корневой записи дерева) | 
| 32 | PREV | номер предыдущей записи (если нет = -1) | 
| 32 | NEXT | номер следующей записи (если нет = -1) | 
| 16 | TERMS | число ключей в записи | 
| 16 | OFFSET_FREE | смещение на свободную позицию в записи (от начала записи) | 
Справочник это таблица, определяющая поисковый термин. Каждый ключ переменной длины, который есть в записи, представлен в справочнике одним вхождением следующего формата:
| Число бит | Параметр | Описание | 
|---|---|---|
| 16 | LEN | длина ключа | 
| 16 | OFFSET_KEY | смещение на ключ (от начала записи) | 
| 32 | LOW | В .n01 файле: ссылка на запись файла .n01 (если LOW > 0) или файла .l01 (если LOW < 0), у которых 1-й ключ равен данному.
 Положительное значение LOW определяет ветку индекса иерархически более низкого уровня. Самый низкий уровень индекса (LOW < 0) соответствует ссылкам на записи (листья) файла .l01. В .l01 файле: младшее слово 8-байтового смещения на ссылочную запись в .ifp.  | 
| 32 | HIGH | В .n01 файле: всегда 0.
 В .l01 файле: старшее слово 8 байтового смещения на ссылочную запись в .ifp.  | 
Ключи переменной длины записываются начиная с конца записи, так что порядок входов, соответствующих им, определяется алфавитным порядком ключей. Сами ключи располагаются вплотную друг к другу без разделителей в порядке поступления на запись.
- Длина справочника 12 * TERMS.
 - Длина ключей = [Размер записи] – OFSET_FREE.
 - Размер свободного места в записи = 16 + 12 * TERMS - [длина ключей].
 - Размер записи зависит от реализации и может быть равен в байтах: 512, 1024, 2048, 4096.
 
Формат файла .ifp
Файл содержит список ссылок для каждого термина словаря.
Список ссылок может быть представлен в 2-х различных форматах. Выбор формата размещения ссылок осуществляется при загрузке словаря из файла .lk1 (этот файл формируется после отбора и сортировки терминов) в зависимости от общего числа ссылок для данного термина. Обыкновенный формат – это заголовок блока и набор упорядоченных ссылок. По превышении определенного числа ссылок (MIN_POSTINGS_IN_BLOCK – в данной реализации 256) формат включает специальный блок и набор блоков обыкновенного формата размер которых определяется по следующей схеме: блоки 4, 8, 16, 32 Кб для общего числа ссылок соответственно 256-32000, 32000-64000, 64000-128000, 128000 и более.
Такая схема оптимизирует работу с диском в процессе инвертирования записи в базах данных, характеризующихся большим количеством ссылок на термин.
Обыкновенный формат записи .ifp
Запись состоит из заголовка и упорядоченного набора ссылок.
Ссылка имеет следующий формат:
| Число бит | Параметр | Описание | 
|---|---|---|
| 32 | PMFN | номер записи | 
| 32 | PTAG | идентификатор поля, назначенный при отборе терминов в словарь | 
| 32 | POCC | номер повторения | 
| 32 | PCNT | номер термина в поле | 
Заголовок имеет следующий формат:
| Число бит | Параметр | Описание | 
|---|---|---|
| 32 | LOW | младшее слово смещения на следующую запись (если нет 0) | 
| 32 | HIGH | старшее слово смещения на следующую запись (если нет 0) | 
| 32 | TOTP | общее число ссылок для данного термина (только в первой записи); число ссылок в данном блоке (в следующих записях) | 
| 32 | SEGP | число ссылок в данном блоке | 
| 32 | SEGC | вместимость записи в ссылках | 
Признак последнего блока – LOW = HIGH = -1
Специальный формат записи .ifp
В этом случае первой записью является специальный блок, который представляет собой заголовок (обыкновенного формата), в котором смещения имеют специальные значения = -1001, и набор вхождений следующего формата:
| Число бит | Параметр | Описание | 
|---|---|---|
| 32 | POSTING | 1-я ссылка из записи обыкновенного формата | 
| 32 | LOW | младшее слово смещения на следующую запись (если нет 0) | 
| 32 | HIGH | старшее слово смещения на следующую запись (если нет 0) | 
Число вхождений кратно 4. Записи, на которые ссылается специальный блок связаны между собой как описано выше. Общее количество ссылок для данного термина сохраняется только в специальном блоке.
Модификация записей файла .ifp
При выполнении актуализации инвертированного файла могут создаваться новые дополнительные записи при добавлении новых ссылок. В этом случае создается новая запись размером, равным общему количеству ссылок, если нет специального блока, и размером, равным количеству ссылок в данной записи, если есть. Новая запись создается таким образом, чтобы не нарушалась возрастающая последовательность следования ссылок. Новая запись связывается с существующими через поле NXT_, ссылки распределяются равномерно между старой и новой записью.
Ссылки
См. также:
Источники информации: