Re: Как происходит добавление операции в *.f3p



Posted by Аркадий Водяник on June 11, 1999 at 05:49:54:

In Reply to: Как происходит добавление операции в *.f3p posted by Олег, Москва on June 10, 1999 at 08:47:54:

Добавление операции в конец файла происходит быстрее
всего. Всего лишь приписывается новая полезная запись
и еще одна пустая запись (null).

Добавление операции в тело файла делается так:
находится "точка" (здесь точка - нестрогая формулировка),
куда надо поместить запись. Выделяется окрестность
вокруг этой точки размером 80 записей назад и 80 записей
вперед. Окрестность помещается в буфер. Если внутри
этой окрестности есть хотя бы одна пустая запись, то
внутри буфера выполняется перегруппировка - пустая
запись "выводится" на место "точки", остальные операции
просто смещаются внутри буфера без потери порядка
следования; пустая операция заменяется на добавляемую,
затем содержимое буфера записываeтся на диск в
окрестность.

Хуже, если внутри окрестности не нашлось ни одной
пустой операции. В этом случае Сервер выполняет так
называемое "разрыхление" файла *.f3p. Файл переносится
на новое место, после каждой полезной операции
добавляется пустая запись, затем снова ищем "точку" и
работаем с окрестностью.

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

Так что лучше, если Ваш конвертер формирует файл *.in,
где директивы O имеют последовательно увеличивающиеся
даты. Так можно избежать разрыхлений вообще.


Пpишедшие ответы: