![]() |
Добавить Архитектура Запросы сейчас Цифры и факты FAQ Кнопка поиска Сделать стартовой |
![]() |
Модуль поддержки основного индекса Turtle Free Space vs/1.0
Статус этого документа.
Этот документ описывает подсистему поддержки свободного пространства основного индекса поисковой системы Turtle. Документ предназначен для служебного использования.Copyright Notice
Copyright © Stack Technologies Ltd. (2001). All Rights Reserved.
Содержание.
1. Назначение. Основным назначением данной библиотеки функций является поддержка информации о наличии свободного пространства в файле данных индекса поиска, используемого SP для произведения логических операций с данными по поисковым терминам. В процессе изменения, удаления данных по поисковым терминам свободное место может освобождаться и может в дальнейшем быть вновь использовано для занесения туда новых данных соответствующего максимального размера. Использование подобной подсистемы позволяет эффективней использовать дисковое пространство без полного перестроения данных поискового индекса. Библиотека написана на языке программирования "C". 2. Принципы работы. Библиотека функций реализована в виде отдельного модуля, входящего в состав основной библиотеки libturtle.a. Коды текстов функций находятся в файле src/lib/indexer_freespace.c. Подсистема держит в памяти сортированный по размеру список структур. Структура определена в подсистеме как:
- 1. Назначение.
- 2. Принципы работы.
- 3. Основные функции.
typedef struct FREESPACE FREESPACE; struct FREESPACE { u_int32_t fs_size; /* size of free space */ off_t fs_off; /* position in the data file */ FREESPACE *fs_next; FREESPACE *fs_prev; };При обращении за координатой свободного места, подсистема по указанному списку находит первый наименьший блок, удовлетворяющий потребностям запроса по размеру. Если такой элемент найден, то подсистема исключает этот элемент из цепочки списка, замыкая fs_next на fs_prev, и возврашает информацию о найденном объекте.
При помещении нового куска свободного места, подсистема находит в цепочке соответствующую размеру куска позицию и вклинивает туда такой элемент.
При остановке работы программы, координаты свободного места могут быть сохранены с помощью специальной функции и при повторном запуске зачитаны. 3. Основные функции.
- u_int32_t freespace_total(off_t *res)
- Помещает в переменную res суммарный размер свободного места в подсистеме.
- void freespace_destroy(FREESPACE *f)
- Освобождает структуру FREESPACE
- void freespace_log(void)
- Отладочная функция вывода содержания всех структур FREESPACE
- void freespace_remove(FREESPACE *f)
- Вспомогательная функция подсистемы удаления структуры f из активных цепочки структур.
- int freespace_open(int flag)
- Зачитывает ранее сохраненные значения структур из файла, определенного в конфигурационных параметрах как dmn.dmn_freespacedb. Возвращает 0 в случае успеха или -1 в случае неудачи. Диагностика заносится в лог-файл, определенный в конфигурации как dmn.dmn_logfile и открытый системой.
- void freespace_sync(void)
- Производит запись текущего состояния структур FREESPACE на диск в файл, определенный в параметрах системы как dmn.dmn_freespacedb.
- void freespace_close(void)
- Функция закрытия подсистемы свободного места, вызывает freespace_sync().
- void freespace_resort(void)
- Пересортирует массив структур, пытаясь слить вместе непрерывные куски свободного места в один. Функция должна вызываться периодически т.к. является относительно "дорогой".
- off_t freespace_get(u_int32_t minsize)
- Получить координату блока, удовлетворяющего условию размера minsize. Возвращает off_t координату в случае успешного нахождения блока или -1 в случае неудачи. При неудаче основная система должна записывать новый блок данных в конец файла данных индекса и сообщить его координату и размер системе.
- void freespace_put(off_t begin, u_int32_t sz)
- Поместить свободный блок файла данных индекса в подсистему.
![]() |
![]() |
![]() | |
![]() |
![]() |
![]() |
![]() |
Черепаший Ранк. Реклама на Turtle Логотипы Правовая информация Конфиденциальность Контакты |
![]() |
![]() |
![]() ![]() ![]() |