Форум: "Базы";
Текущий архив: 2002.12.16;
Скачать: [xml.tar.bz2];
ВнизПроблемы с большим деревом Найти похожие ветки
← →
Diouzshev (2002-11-26 13:29) [0]Добрый день многоуважаемый 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.Скорость поиска)
← →
exit (2002-11-26 13:36) [1]1. Читай только ветви текущего уровня, а подчиненные в OnExpand
← →
Diouzshev (2002-11-26 13:51) [2]To exit (26.11.02 13:36)
но как сделать тогда, чтобы это не конфликтовало с п. 4. (Поиск)?
← →
exit (2002-11-26 13:57) [3]Извини, я не заметил, что ты спецкомпонент используешь.
Похоже, что либо придется мириться с тормозами, либо искать (писать)другой компонент.
Попробуй обновление дерева сделать принудительным и после обновления показать его со сложенными нодами.
← →
Diouzshev (2002-11-26 14:24) [4]тут даже не в спецкомпоненте....
я могу от него и отказаться, вопрос в том, что если погружать на OnExpand, то серьезно усложняется алгоритм поиска (т.е. искать в базе, выбирать всех родитителей для каждого подходящего узла, да еще их сортировать так, чтобы совпадало с сортировкой в дереве и поиск был не похож на случайное выдергивание узлов из дерева и был последовательный).
Возможно я хочу пальнув в небо из берданки истребить род зайцев :(, но регедит как-то это делает ведь %(
← →
MMF (2002-11-26 14:28) [5]Я работаю с компонентой MetaTree - проекция дерева на параболическую поверхность, очень удобно для сложного дерева. По сравнению с обычным TreeView намного быстрее в построении. У меня на Cel950 дерево из 20000 узлов строится примерно секунду-две. Но сортировки в этой компоненте нет. Хотя можно сохранить дерево в поток и отсортировать, а потом загрузить из потока
← →
Diouzshev (2002-11-26 14:43) [6]Для MMF © (26.11.02 14:28)
Интересная штука, и ей можно найти массу применений :)
но для иерархического справочника, имхо, не очень подходит...
Но все равно классная :)))
← →
Delphin2002 (2002-11-26 15:01) [7]неверно поставлена задача
для скорости ты должен хранить данные как в реестре
то есть ключ типа
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 17:38) [8]Для Delphin2002 © (26.11.02 15:01)
В последнее время я все больше склоняюсь к такому типу хранения данных, но тут тоже есть проблемы, например, перемещение узлов в дереве...
← →
Delphin2002 (2002-11-26 19:26) [9]Это решается простым SQL-em
"update ttt set id=newparent||""\""||name
where upper(id) like upper("oldparent%")"
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.12.16;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c