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

  • Автор темы Автор темы Agatov
  • Дата начала Дата начала

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.
похожее по функционалу дерево комментов имеется на хабре. Ну, по крайней мере видимая его ( функционала ) часть сходится. Как оно устроено у них внутри остаётся только догадываться.
 
ну, при таком дереве - разумеется, придется слать все.
а кто мешает посмотреть, что шлется на хабре?
 
честно говоря не представляю как это сделать.

буду делать другое дерево значит :(
 
Ну вот. Теперь я совсем запутался.

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

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

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

-~{}~ 16.12.08 00:01:

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

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

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

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

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

А на клиенте уже по parent_id каждого первого коммента присланных веток прилеплять к имеющимся с помощью parent_id. Остальные уже достраивать за первым.
 
что за проблема - "лепить ветви"?
по-твоему, единственная задача, которую решают различные средства хранения деревьев в базе - это только достать дерево целиком?

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

-~{}~ 16.12.08 00:37:

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