Пользуетесьли Вы косвенным поиском по ленте фатов ??? Или о поиске оптимума



Posted by Рустем Мухаметшин on December 20, 1998 at 05:25:29:

In Reply to: О ВНУТРЕННЕМ УСТРОЙСТВЕ ФАКТОВ posted by Аpкадий Водяник, ЗАО Хакеpс Дизайн on December 20, 1998 at 01:25:43:

        Как выясняется в структуру фактов заложена большая гибкость. Другое дело - Пользуется ли этим кто ??? Я опять таки насчет первой фразы прототипа. Она порлностью прописывается при каждой записи факта. Это дает возможность организации косвенного поиска по ленте фактов.
        Например:
* Форма с косвенным поиском по ленте
* Предположим наличие двух прототипов фактов
* Первый прототип %
* Второй прототип %
* Пусть теперь факты по обоим прототипам прописываются по парно - тогда можно написать следующую форму обработчик
A1='Первый прототип'
A2='Второй прототип'
A =A1
I  =0
rewind facts
:next
search A, ?X
![success]=0
goto exit
!
. . .

!I=0
* Факт "Первый прототип" нашли ищем следующий за ним факт "Второй прототип"
A =A2
I =1
goto next
!I=1
* Факт "Второй прототип" нашли ищем следующий за ним факт "Первый прототип"
A =A1
I =0
goto next
!
:exit
stop
        Можно придумать еще несколько подобных вариантов использования косвенного поиска. Вопрос: КТО НИБУДЬ ТАК ПИШЕТ   ???

        Отвлекусь ненадолго и затрону вопрос о длине индексной фразы факта. В действительности нет ни какого смысла жаться на ее длине. Напишете чтото осмысленное. Отличия в потребелении ОЗУ при индексе в 1 байт или 20 байт не будет ни какого. 19 байт экономии в первом случае потонут в процентном отношении на фоне самой структуры факта. Результат экономии будет смешон.

        Другое дело быстродействие. И это по моему главный момент. Сравнение длинных индексов в большом количестве будет медленно работать. Вместе с тем как я уже и предлагал ФБП может просто проиндексировать в числах все прототипы из PROTO.RPT в числах и в вообще исключить многократное прописывание прототипа в ОЗУ. А на поиске по ленте фактов я думаю будет достигнута большая производительность. Ведь придется сравнивать целые числа а не строки. Индексацию в числах сервер может делать при загрузке, соответственно подменяя во всех RPT строковый индекс на числовой. При этом пострадает косвенная индексация. Еще раз спрашиваю - ее пользуются ??? Еще одна возможность будет утерена - динамическая генерация прототипа (прямо на ходу построения баланса придумывать новые пртотипы) - сейчас это почтичто реально. С другой стороны немножко поработав над числовой индексацией можно полность востановить работоспособность косвенного поиска.

        Подобная гибкость механизмов конечно хороша, но там где она действительно нужна. На большей части задач которые приходится решать это просто обуза. Я имею в виду и экстрапараметры. Да мы фактически имеем возможность динамически генерировать произвольные переменные. А всегда ли это нужно ??? Нет. В большей части нужен набор нескольких заранее определенных переменных. В этом случае нет необходимости индексировать их по строкам-индексам. Плохо что по другому в ФБП нельзя сделать массивы - тут уж действительно без строковых индексов не обойтись. Вместе с тем нужны переменные похожие на э-п но которые не имеют хронологии (экономия 52 байта на переменной) потомучто часто объект учет имеет какуюто харатеристику не меняющуюся во времени но нужную в расчетах (что же ее в EXTRD?)



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