Как делать комментарии в ленте активности? (как Facebook)

Начинаю развивать ленту активности. Я прочитал как Как реализовать поток активности в социальная сеть и как лучше всего внедрения потока социальной активности?. То, что я не нашел, - это лучший способ добавить комментарии к занятиям. Как и в facebook, каждый комментарий может комментировать другой человек.

Если каждый комментарий к действию сохраняется как другое действие, я не смогу получить действие этого комментария без запроса. Итак, я думаю, что решение состоит в том, чтобы сохранять комментарии в поле сериализованных данных каждого действия. Если пользователь хочет удалить свой комментарий, мне придется обновить это действие.

Это правильное решение? Есть ли лучший подход?

Спасибо!


person fesja    schedule 03.05.2010    source источник
comment
Хороший вопрос @fesja. Что ты в итоге сделал?   -  person Luccas    schedule 07.01.2013


Ответы (2)


Я согласен с Якубом - это зависит от вашего бэкэнда, но вам нужен эффективный метод хранения дерева. Если вы используете базу данных SQL, я бы сохранил как родительскую активность, так и корень дерева (главный идентификатор?). Таким образом, вы сможете быстро получить все дерево комментариев с учетом любого комментария или идентификатора действия.

Тогда ваш поисковый код будет выглядеть примерно так:

  • Чтобы воспроизвести весь поток активности с комментариями, возьмите все записи с одним и тем же основным идентификатором. Вероятно, вы захотите представить основные записи как имеющие нулевой родительский идентификатор.
  • При добавлении комментария вам необходимо обновить два поля - основной идентификатор и родительский идентификатор. Вы можете получить их оба непосредственно из родительского действия, не выполняя никаких поисков.
  • При удалении комментария просто удалите его, и он исчезнет из дерева.
  • Если вам просто нужны «основные» действия, выберите, где parent = null, и все готово.

Например, если это поможет:

  • Master Activity (id=123, p=null, m=123)
    • Comment (id=124, p=123, m=123)
    • Another comment (id=125, p=123, m=123)
      • A sub-comment (id=126, p=125, m=123)

Я помню, как читал пример этого с использованием хранилища документов с Couch-DB. Я не могу его сейчас найти, но по памяти он использовал что-то похожее (мастер-идентификаторы для родительских записей).

person Anthony Briggs    schedule 12.05.2010
comment
спасибо, Энтони, проблема с этим подходом заключается в том, что если я хочу получить последние действия от пользователя (с комментариями), я беру последние 30 записей о пользователе (действия и комментарии) в порядке created_at: - Однако внутри будут комментарии те 30 (чтобы не было 30 мероприятий). - Или могут быть комментарии без родительской активности (потому что не было этих 30) - person fesja; 13.05.2010
comment
В случае, о котором вы говорите, вы, вероятно, захотите захватить все «дерево» для каждого действия (например, один из ваших 30 имеет id = 125 выше, поэтому вы захватываете все четыре). Вы можете сделать это за один запрос, но он может стать довольно большим. Другой вариант - брать вещи по запросу, например. ссылка AJAX "подробнее ..." или что-то в этом роде. Что вы выберете, действительно зависит от того, что вы делаете. Для RSS-канала активности вариант №2, вероятно, лучше всего, но для (например) главной страницы профиля вам, скорее всего, потребуется запрашивать все. - person Anthony Briggs; 14.05.2010

Это зависит от того, какой тип серверной части вы используете и каковы ваши ограничения.

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

person Jakub Hampl    schedule 10.05.2010