Nested set и ветка комментариев форума

Pavel6

Новичок
Nested set и ветка комментариев форума

Есть форум, в котором комментарии тем выводятся веткой дерева.
Таблица комментариев имеет 1511670 записей.
Ветка выводится с помощью рекурсии, id подставляется для поиска parent_id, для каждого комментария таким образом делается sql - запрос.
Данная структура вывода комментариев очень тяжела, и из-за этого форум просто тормозит, чем больше таблица наполняется, тем тяжелее выводить ветку деревом.

Хотел бы узнать, если я переделаю структуру на остове алгоритма Nested set.
То поможет мне это, или еще усугубит.
Меня пугает то что при добавлении комментария прийдется пересчитывать поля left, right с помощью Update. Не будит ли это еще хуже.

Я на предыдущих своих форумах использовал данный алгоритм, но там небыло столько записей.
Если кто то имел опыт, в реализации Nested set в огромных таблицах, прошу помочь мне.
 

kruglov

Новичок
Надеюсь, 1511670 - это не комментариев к одной теме?
Сделайте не одно дерево, а кучу (лес), т.е. в таблицу комментариев добавьте поле thread_id (тема) и обновляйте только те, у кого thread_id нужный.
 

Pavel6

Новичок
Автор оригинала: kruglov
Надеюсь, 1511670 - это не комментариев к одной теме?
Сделайте не одно дерево, а кучу (лес), т.е. в таблицу комментариев добавьте поле thread_id (тема) и обновляйте только те, у кого thread_id нужный.
Да это не одна ветка, это общее колличество комментариев.
Максимальная ветка в теме имеет 27931 записей.
Меня волнует как будет срабатывать по ним UPDATE, не будит ли это еще хуже.
 

fixxxer

К.О.
Партнер клуба
нафиг нестед сетс когда много инсертов

я бы сделал id+parent_id+fullpath, fullpath - varbinary с pack() полного пути

-~{}~ 16.12.07 09:54:

...только если будешь делать с паком, засунь первым и последним символами что-то не равное нулевому символу и пробелу, иначе на \x00 и \x20 получишь прикол
 

Pavel6

Новичок
Автор оригинала: fixxxer
нафиг нестед сетс когда много инсертов

я бы сделал id+parent_id+fullpath, fullpath - varbinary с pack() полного пути
Я так понимаю поле fullpath будет служить для сортировки, и ветку будет можно вывести одним select-ом.
Но можно подробнее, какие данные в нем хранить.
Или скиньте ссылку где можно почитать про fullpath.
Или приведите маленький пример с 3-мя узлами.

За раннее благодарю.
 

Фанат

oncle terrible
Команда форума
fixxxer, как раз повод дать ссылочку =)
Хотя статья в факе была ужасная, надо сказать.
Сам бы переписал, но это ж надо самому нестед сетс асиливать. А у меня лимит на понималку Недавно только с кодировками разобрался, теперь отдыхать буду =)

Pavel6
можно падить id записи, и записывать по цепочке
к примеру
id pid path
1 0 000001
2 1 000001000002
 

Popoff

popoff.donetsk.ua
fixxxer
varbinary с pack() полного пути
только если будешь делать с паком, засунь первым и последним символами что-то не равное нулевому символу и пробелу, иначе на \x00 и \x20 получишь прикол
чтобы не получить прикол, нужно не символы непонятные добавлять, а использовать правильные поля - tinyblob, к примеру.

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

Фанат

oncle terrible
Команда форума
Popoff
извини, конечно, что я так, за глаза. Но всё-таки.
Одно то, что в разделах, посвященных разным методам построения деревьев, не было описания... самих методов - ужасно.
Надо было догадаться залезть в глоссарий, чтобы понять - как вообще храннится дерево, практические методы работы с которым описываются. И почти никаких объяснений целостной картины, а только решение отдельных, не связанных между собой задач.

Да, если соберусь, то попрошу.
А пока лучше отдай fixxxer-у, если нетрудно.
 

Popoff

popoff.donetsk.ua
http://download.popoff.donetsk.ua/phpclub/Tree.zip

*****
Та я же не претендую на то, что там полные материалы. У меня просто было пару свободных месяцев летом и я (в лоб) сделал то, что попросил г-н Смирнов - перенёс ветку избранного из форума в фак.
 
Сверху