Дерево комментариев и фоновое обновление

Agatov

Новичок
Дерево комментариев и фоновое обновление

Доброго времени суток.

Прикидываю вот как лучше сделать сабж. Чуть подробнее:

Древо комментариев хранится в БД ( Nested Sets - т.е. вся инфа о вложенности хранится в двух полях LEFT и RIGHT ).При первом обращении к странице оно отдаётся полностью. Далее нужно, чтобы добавлялись только непрочитанные юзером комментарии. Для этого планирую завести отдельную табличку в которой хранится id последнего прочитанного комментария + общее количество прочитанных комментариев в дереве. Естесственно с последующим перемещением этой таблицы в память.

Планирую делать так:

На первом шаге скрипт по базе генерит xml который потом кормится скрипту на стороне клиента. Скрипт по нему строит дерево. В дальнейшем, при обновлении дерева, код выбирает из БД все непрочитанные коменты и передаёт их скрипту, который достраивает дерево в необходимых местах.

Первичный XML планирую сделать такой:

<tree>
<comment>
... some params
<children>
<comment>
<chilren>
........
</children>
</comment>
</children>
</comment>
</tree>

Предпологается, что будет один корневой комментарий, который выводится не будет. Остальные - его потомки.

Нормален ли такой подход? Или может можно как-нибудь проще?

----
Как при обновлении дать понять скрипту какие потомки куда достраиваются? Это главный вопрос - ведь понять какой комментарий в какой вложен можно только при просмотре всего древа. Не слать же каждый раз xml дерева целиком? Или я заблуждаюсь?

-~{}~ 10.12.08 22:04:

P.S.
похожее по функционалу дерево комментов имеется на хабре. Ну, по крайней мере видимая его ( функционала ) часть сходится. Как оно устроено у них внутри остаётся только догадываться.
 

Фанат

oncle terrible
Команда форума
ну, при таком дереве - разумеется, придется слать все.
а кто мешает посмотреть, что шлется на хабре?
 

Agatov

Новичок
честно говоря не представляю как это сделать.

буду делать другое дерево значит :(
 

Agatov

Новичок
Ну вот. Теперь я совсем запутался.

Использовать схему id / parent_id не выходит из-за множества запросов к БД при рекурсии. Таким образом, отбрасывая вложенные множества и вложенные интервалы, остается лишь один вариант - материализованные пути.

оно? или же есть еще варианты?
 

AmdY

Пью пиво
Команда форума
зачем рекурсивные запросы, если можно left join
 

Фанат

oncle terrible
Команда форума
что за бред? при чем здесь рекурсия? ты сам писал, что у тебя нестед сетс
 

Agatov

Новичок
Автор оригинала: *****
что за бред? при чем здесь рекурсия? ты сам писал, что у тебя нестед сетс
ты меня не понял. Нестед сетс тут не при чём, от него я отказался по выше приведённой причине. Я стал рассматривать другие варианты.

Рекурсия используется при выборке дерева, у которого потомки ссылаются на родителей через parent_id.
 

Фанат

oncle terrible
Команда форума
нафига ты от него отказался?
при чем здесь вообще выборка?
речь не о выборке, а о твоем XML!

-~{}~ 16.12.08 00:01:

выборку вообще трогать не надо
я до тебя пытался донести простую, до идиотизма мысль:
что если ты хочешь потом добавлять в дерево элементы, то тебе надо их как-то идентифицировать - кто за кем.
 

Agatov

Новичок
ок. Сервер отослал клиенту первичный XML. После этого добавилось ещё N комментариев. Как в таком случае мне их дослать клиенту при запросе?

У меня есть id последнего комментария, который видел пользователь. Также, допустим, я добавил поле parent_id.

я вижу два варианта:

1) Либо выбирать только новые комментарии, как-то лепить из них ветви и отсылать.
2) Либо выбирать всё целиком, вырезать недостающие клиенту ветки/части ветвей и отсылать.

и первый и второй варианты мне как-то не особо нравятся.

А на клиенте уже по parent_id каждого первого коммента присланных веток прилеплять к имеющимся с помощью parent_id. Остальные уже достраивать за первым.
 

Фанат

oncle terrible
Команда форума
что за проблема - "лепить ветви"?
по-твоему, единственная задача, которую решают различные средства хранения деревьев в базе - это только достать дерево целиком?

Какой смысл выбирать все, если нужно только новое, и что тебе не нравится в решении, ТОЧНО СООТВЕТСТВУЮЩЕМ ЗАДАЧЕ: показать новые сообщения и выбрать новые сообщения? Когда голову включать начнем?
 

Agatov

Новичок
проблема как раз в "показать" новые сообщения. Получить из БД я их могу. Но не представляю как по выбранному куску из многих подмножеств сделать XML по которому в дальнейшем будут выводится новые сообщения. Даже если я буду знать родителя каждого из выбранных сообщений.

-~{}~ 16.12.08 00:37:

Хотя, если отсылать не такую структуру, как я привёл в первой посте, а просто <comment><id> ... </id><parent_id> ... </parent_id> </comment> то можно обойтись и без ветвей.
 

Фанат

oncle terrible
Команда форума
ну, раз не можешь, то оставь эту затею
выводи по-старинке, без аякса
 

Agatov

Новичок
А что если внутри тега comment передавать его parent_id и добавлять его к ветке с таким-же id (id html объекта имеется в виду ). А если такой ветки не существует, то создавать её. В таком случае даже нестед сетс не понадобятся, нужно только сортировать комментарии по дате добавления при выборке... Нужны будут только id да parent_id.
 
Сверху