И память и скорость и индексация



Posted by Рустем Мухаметшин on November 09, 1999 at 12:38:07:

In Reply to: ОЗУ + специальное индексиpование = пpоизводительность posted by Аpкадий Водяник on November 09, 1999 at 04:00:08:

Я думаю, Аркадий, Вы понимали, что я не оставлю данные результаты без замечания :)))

В общем-то, правильные результаты. Абстрактно. Подумаем, а если в них практическая польза. Считать можно что угодно и сколько угодно. Ни одна программа в мире не способна удовлетворить абстрактные потребности счета. Поэтому, если какая-то из них может быстро считать некоторые из огромного числа возможных "сложных штучек", то это еще не значит, что на ней можно вести бухучет.

Ну а пример то был подобран весьма выгодный для быстрых фактов. Каждый индекс словаря в обеих позициях встречается ровно один раз!!!. Индексация нас прямо и выводит на него. Кроме того нет никаких балластных полей. Т.е. полей по которым нам вовсе не нужно делать отбор. Вот если бы факт был следующего вида
F % второе ключевое слово % сумма1 % сумма2 % сумма3 %
Три поля в индексации не нуждаются, но они сожрут под себя ресурсы (и при этом не только ОЗУ, но и времени!!!)
Ну а теперь к цифрам. Ну и что ж мы видим - 6 часов без незаменимых "быстрых"? Мы видимым - абсолютно неграмотный или, если хотите, непригодный алгоритм !!!
Возьмем другой вариант алгоритма имеющий тот же результат исполняющийся за 9067 мс (9 сек) вместо обещанных 6-и часов.

P200MMX 96Mb, Win98, UltraH32           мс

Rewind Facts
:next
47.7% 4 324 search F ?W1, ?W2
10.3% 936 If [success]=0 GoTo exit EndIf
21.7% 1 968 [a W1, W2];[b W2, W1]
1.1% 96 GoTo next
:exit
1.6% 148 For I=1 To 100000
7.9% 720 W2=[a I]
8.2% 745 W1=[b I]
1.4% 130 EndFor
Итак, каковы результаты.

 

Быстрые факты

Без быстрых

Памяти под факты

10 059 К

4 785 К

Памяти под массивы

0

2 344 К

Скорость исполнения FACT

201 мкс

29.4 мкс

Скорость счета (на одной операции)

0.1 оп/с

0.6 оп/с

Скорость исполнения формы с поиском

Честно говоря не мерил точно, но получится те же 9 сек примерно

9 сек

Вывод
В текущем исполнении механизма индексации полей фактов при необходимости таковой лучше прибегнуть к индексации при помощи экстрапараметров. В любом случае выигрыш будет как в экономии памяти, так и в быстродействии. В большинстве же случаев и вовсе можно обойтись без индексации строя таблицы индексов по необходимости в массивах не тратя при этом памяти вообще!!! (память будет высвобождена после исполнения формы). И в том и в другом случае выигрыш не только в ОЗУ но и в скорости.


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