Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
И снова деревья
|
|||
|---|---|---|---|
|
#18+
версия постгресса - 8.2.5. Какие способы хранения и отображения деревьев? Насколько надежно и быстро работает (и работает ли вообще) CONNECT BY PRIOR, и как его "доставить"? Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2008, 16:59 |
|
||
|
И снова деревья
|
|||
|---|---|---|---|
|
#18+
raul_83версия постгресса - 8.2.5. Какие способы хранения и отображения деревьев? Насколько надежно и быстро работает (и работает ли вообще) CONNECT BY PRIOR, и как его "доставить"? Спасибо а ты смотрел contrib/ltree ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2008, 22:11 |
|
||
|
И снова деревья
|
|||
|---|---|---|---|
|
#18+
о! а я токо хотел про ето поболтать :) вот есть потребность в иерархичности справочников в проге моей - но пока не необходимость :). полистал немного форумы и т.п. - мало что понял :). ну и вот я для прикола провёл следственный эксперимент. сразу если кому это покажется смешно - пожалуйста - я не обижусь :). просто меня почемуто это удивило - я думал так не получится. теперь то получилось - токо теперь я не понимаю почему так делать не хотят... ну вот собственно сам эксперимент: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. а народ изобретает какие-то геморные велосипеды на эту тему... странно. вот же ш вам пожалуйста на блюдечке - вставка, перемещение, удаление ветки со всеми ответвлениями. единственную вижу проблему - это всякие выборки по типу с сортировкой по алфавиту в пределах ветки всего дерева, полный путь и тому подобное. ну это совсем не сложно на plpgsql сделать - у самого пока руки не доходили - но думаю пара циклов - и рекурсия наверное... скорее всего... токо на plpgsql никогда её не пользовал - не знаю можно ли :) - можно? надо попробовать... токо видимо со скоростью не супер будет - но я думаю вполне терпимо должно быть - целостность данных важнее адназначна! на крайняк если совсем уж сильные пробуксовки будут можно вообще отказаться от загрузки всего дерева целиком - грузить токо раскрываемую пользователем ветку. т.е. подгружать узлы по мере требования. думаю тоже нормально будет. может и вообще сразу так сделать - ещё не решил. что скажете? какие тут возможны грабли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2008, 02:34 |
|
||
|
И снова деревья
|
|||
|---|---|---|---|
|
#18+
aovа народ изобретает какие-то геморные велосипеды на эту тему... странно. вот же ш вам пожалуйста на блюдечке - вставка, перемещение, удаление ветки со всеми ответвлениями. единственную вижу проблему - это всякие выборки по типу с сортировкой по алфавиту в пределах ветки всего дерева, полный путь и тому подобное. ну это совсем не сложно на plpgsql сделать - у самого пока руки не доходили - но думаю пара циклов - и рекурсия наверное... скорее всего... токо на plpgsql никогда её не пользовал - не знаю можно ли :) - можно? надо попробовать... токо видимо со скоростью не супер будет - но я думаю вполне терпимо должно быть - целостность данных важнее адназначна! на крайняк если совсем уж сильные пробуксовки будут можно вообще отказаться от загрузки всего дерева целиком - грузить токо раскрываемую пользователем ветку. т.е. подгружать узлы по мере требования. думаю тоже нормально будет. может и вообще сразу так сделать - ещё не решил. что скажете? какие тут возможны грабли? Это классическое SQL дерево. Нормальная схема, прекрасно работает. Но, тормоз. Если в дереве 20-80 тыс записей, то работа непосредственно с самим деревом не тормозит. А вот когда тебе надо выбрать все узлы из какой-то одной ветки и пересечь результат с таблицей-милионником, вот здесь начинается швах. Поэтому приходится на такие деревья навешивать костыли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2008, 08:07 |
|
||
|
И снова деревья
|
|||
|---|---|---|---|
|
#18+
а - ну у меня думаю ни 20тыс записей в дереве ни пересечения с милионами с других таблиц никогда не будет :) - у меня пока это нужно токо для групп товаров. думаю их никогда не будет более 1000 - а по среднему 20-200. и самих товаров - для пересечения - 7-10тыс - ну максимум 30 - при любом раскладе на любого срока перспективу. тоесть получается вроде как мне - по крайней мере для этой задачи - нет смысла заморачиваться? этого хватит? а что меня вообще удивило и почему - у меня кроме постгреса токо с аксесом плотное знакомство было :) - там кажися не было возможности поддержки целостности данных при такого типа связей. хотя... - может это я балбес :). не помню пробовал ли... уже не оч помню почему - но результаты эксперимента с условиями на целостность данных меня оч удивили. уж и не знаю почему я решил что не будет работать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2008, 10:07 |
|
||
|
И снова деревья
|
|||
|---|---|---|---|
|
#18+
Oleg Bartunov raul_83версия постгресса - 8.2.5. Какие способы хранения и отображения деревьев? Насколько надежно и быстро работает (и работает ли вообще) CONNECT BY PRIOR, и как его "доставить"? Спасибо а ты смотрел contrib/ltree ? Смотрел connectby, возвращает иерархию, то что нужно. На сколько стабильно и быстро осуществляется выборка? Есть ли смысл использовать классическое представление деревьев, триггером заполнять необходимые поля. Понятно, что в классическом виде увеличится скорость выборки, но замедлится процесс добавления, изменения записей. Таблица - несколько сот тысяч записей, в перспективе - больше, уровень вложенности - ну пусть будет до 20 (перестраховываюсь). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2008, 11:02 |
|
||
|
И снова деревья
|
|||
|---|---|---|---|
|
#18+
raul_83 Таблица - несколько сот тысяч записей, в перспективе - больше, уровень вложенности - ну пусть будет до 20 (перестраховываюсь). Если данных планируется много, лучше сделать набор функций, которые для каждого уровня будут создавать отдельные таблицы. В этом случае планировщик сможет эффективно обрабатывать связку этих таблиц с другими (независимо от высоты дерева). Иначе при попытке привязать к таблице-дереву десяток больших таблиц (миллионы записей и более) будет полный ахтунг. В общем-то, построить дерево можно многими путями, вопрос в том, что для эффективной работы с такой структурой ее строение должен "понимать" постгрес, иначе sql-запросы станут неэффективны. Так что если описывать дерево, то в терминах реляционной модели, иначе просто нет смысла (если данных мало, можно делать как больше нравится, например, хранить все дерево в виде массива и т.п.). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2008, 13:55 |
|
||
|
|

start [/forum/topic.php?fid=53&tid=2004619]: |
0ms |
get settings: |
5ms |
get forum list: |
25ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
127ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 429ms |

| 0 / 0 |
