Непрочитанное сообщение
ProFTP » 2009-10-04 17:27:08
сейчас думаю над архитектурой еще одного дерева...
мне показалось что NestedSet не подойдет для него так как NestedSet все операции кроме SELECT ресурсоемкие!!
недостатки в Nested Set: если вы заметили, точно такая же рекурсия, только там идет UPDATE ресурсоемкий который все дерево изменяет (очень много записей) по этому я нашел решение где-то на opennet.ru на innodb с ускорением за счет внешних ключей и транзакции (чтобы дерево не развалилось во время изменение структуры) говорят что если innodb с большой базой, то грузит сильно сервер, неоднократно сталиквался, но в приципе мне все равно
про мое дерево долго рассказывать:
1)
щас нарисую
"Корень дерева" --> "разедел1"
````````````````` "разедел2"->>>"разедел1"
````````````````` "разедел3"````"разедел2"
````````````````` "разедел4"````"разедел3"->>>>>>"разедел1"
````````````````` "разедел5"````````````````````"разедел2"
````````````````` "разедел6"````````````````````"разедел3"
```````````````````````````````````````````````"разедел4"
из этого:
а) у кадого раздела может быть свой "подраздел(ы)"
б) у кадого раздела может быть "тема(ы) сообщения" как на этом форуме
б2) у темы есть коментарии
думаю все понятно?
2) нужно сделать:
перенос узла,
выборка всех родителей вверх,
просмотр
вывести дерево начиная от како-то элемента,
удаление/изменение атрибутов всего дерева со всеми подчиненными узлами
если ничего не забыл, может еще что-то
все дерево выносить не надо
===
при обычном parent_id:
id
parent_id
(можно еще level)
Преимущества дерева
1) перенос
2) Добавление
3) Нормальный SELECT и SELECT всех родителей (SELECT сразe 50-100 ступеней можно сделать,( т.е. ограничить) а лишние удалить, либо рекурсию) все остальное нормально
Недостатки:
1) удаление всего дерева затруднительно (рекурсию надо делать, или процедуру)
НО в условии, например присутствует, что пользователи не могут когда они захотят все удалить, литит удлаения должен быть (проблем не будет)
2) узменение атрибута узла и всего поддерева (например надо все дерево скрыть начиная с конкретного узла) (рекурсию надо делать, или триггер)
можно записывать level уровень, чтобы сделать еше быстрый SELECT всех родителей и в один НОРМАЛЬНЫЙ запрос
вообщем, как?
писал старался, хотел узнать может есть замечания какие-то?
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'

