Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблемы с большим деревом [D6, Access]


Diouzshev ©   (2002-11-26 13:29:00) 

Добрый день многоуважаемый All!
Суть проблемы такая:
Есть достаточно большое дерево (связь ID->IDParent) порядка 20к-25к узлов, для отображения используется dxDBTreeList, в итоге, после загрузки дерева прога занимает в памяти 30-35мб, что более-менее терпимо
Дальше жизнь дает трещину:
1. Любые обновления дерева (не каскадные) 20 сек (Celeron 400 256Mb), а надо бы еще и каскадные :(
2. Через SQL - быстро, но надо перечитывать дерево (те же 20 сек, а то и больше)
3. Есть замечательная весчь( http://ibase.ru/devinfo/treedb.htm), но как в такой штуке устраивать поиск (все таки 20 килонодов, простой навигацией не отделаешься)
4. И что больше всего смущает Regedit делает все это быстро и памяти не жрет %(

Что можете посоветовать для решения проблем?
( Уточняю:
1.Память
2.Скорость работы
3.Скорость обновления
4.Скорость поиска)


Delphin2002   (2002-11-26 19:26:00) [1]

Это решается простым SQL-em
"update ttt set id=newparent||""\""||name
where upper(id) like upper("oldparent%")"


Diouzshev   (2002-11-26 17:38:00) [2]

Для Delphin2002 © (26.11.02 15:01)
В последнее время я все больше склоняюсь к такому типу хранения данных, но тут тоже есть проблемы, например, перемещение узлов в дереве...


Delphin2002   (2002-11-26 15:01:00) [3]

неверно поставлена задача
для скорости ты должен хранить данные как в реестре
то есть ключ типа

ID | Value
----------------------------------------------|-------------
Parent0\Parent1\Parent2\Parent3\Parent4\Key | zzzzz

а не связку
ID | Parent | Value
-----------------------------
Key | Parent4
Parent4 | Parent3
Parent3 | Parent2
Parent2 | Parent1
Parent1 | Parent0




Diouzshev   (2002-11-26 14:43:00) [4]

Для MMF © (26.11.02 14:28)
Интересная штука, и ей можно найти массу применений :)
но для иерархического справочника, имхо, не очень подходит...
Но все равно классная :)))


MMF   (2002-11-26 14:28:00) [5]

Я работаю с компонентой MetaTree - проекция дерева на параболическую поверхность, очень удобно для сложного дерева. По сравнению с обычным TreeView намного быстрее в построении. У меня на Cel950 дерево из 20000 узлов строится примерно секунду-две. Но сортировки в этой компоненте нет. Хотя можно сохранить дерево в поток и отсортировать, а потом загрузить из потока


Diouzshev   (2002-11-26 14:24:00) [6]

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

Возможно я хочу пальнув в небо из берданки истребить род зайцев :(, но регедит как-то это делает ведь %(


exit   (2002-11-26 13:57:00) [7]

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


Diouzshev   (2002-11-26 13:51:00) [8]

To exit (26.11.02 13:36)
но как сделать тогда, чтобы это не конфликтовало с п. 4. (Поиск)?


exit   (2002-11-26 13:36:00) [9]

1. Читай только ветви текущего уровня, а подчиненные в OnExpand


Наверх

Титульная страница Поиск, карта сайта Написать письмо