Ещё немного о "дереве"

Метки записи:
Описание задачи: 

Столкнулся с проблемой отображения в дереве большого количества строк.(версия 3.1.1)

Описание решения: 

Так как это дерево , то стандартный вариант с постраничным отображением не проходит , а ограничить количество строк как-то нужно (предположительное количество строк уходит за 100 000)
Решил использовать IncludeFilter который будет возвращать 40 строк верхнего уровня дерева . Во все строки прописываю поле EWorksID в котором находится ссылка кА стоку первого уровня . Запрос приобрел такой вид
SELECT "tbl_EWorks"."ID" "ID",
"tbl_EWorks"."ParentID" "ParentID",
"tbl_EWorks"."ParentGroupID" "ParentGroupID",
"tbl_EWorks"."EWorksID" "EWorksID"
FROM "tbl_EWorks" "tbl_EWorks"
WHERE (("tbl_EWorks"."EWorksID" IN
(SELECT *
FROM (SELECT "tbl_EWorks"."ID" "ID"
FROM "tbl_EWorks" "tbl_EWorks"
WHERE ("tbl_EWorks"."ParentID" IS NULL))
WHERE ROWNUM <= 40)))
Он выбирает первые 40 веток дерева
Все последующие фильтры необходимо накладывать внутрь IncludeFilter .
С помощью доработки ядра(3.1.1.54) удалось вставить в IncludeFilter пользовательские фильтры. Теперь с помощью них можно выбирать все ветки дерева которые удовлетворяют условиям фильтрации(варианты фильтрации дерева могут быть разными , такой вариант подходит если нужно отображать всю ветку полностью)
Доп: Описанный вариант применим к БД Oracle , в других СУБД возможны изменения

Комментарии

Агутин Алексей

Интересно, это как это отразилось на быстродействии и насколько такой вариант медленее чем стандартный ROWNUM <= 40

Денис М

Алексей в дереве нет ROWNUM <= 40

Старун Юлия

Подозреваю версия 3.3.1, а не 3.1.1. До версии 3.3.0 древовидного реестра проектов не было.
В одном из проектных решений в реестре дерева было 15 тысяч проектов, построение дерева занимало много времени. обошли следующим образом: добавили представление "Список проектов", где отображаются только проекты. От него можно перейти к дереву проекта со стадиями и работами. Во всех сущностях системы для привязки действует ограничение, что вначале следует выбрать клиента, проект которого следует найти.
Работает довольно быстро.