Мне нужно создать канал активности (поток? «Жизненный поток», чтобы быть более точным.) Для системы, аналогичной (такой же), похожей на многие популярные платформы социальных сетей. Моя первая попытка состояла в том, чтобы использовать СУБД, но быстро отказался от идеи из-за огромного количества необходимых соединений. Очистившись от других возможных (и более подходящих) подходов, я наткнулся на следующий пост:
Как сайты социальных сетей вычисляют обновления друзей?
Принимая советы по использованию очереди сообщений, я потратил некоторое время на изучение RabbitMQ и его протокола PubSubHubbub. И я постулировал следующий подход:
1) У каждого пользователя есть «тема»
2) Другие пользователи подписываются на тему
3) Когда пользователь выполняет какое-либо действие, публикуется сообщение, которое затем связывается (ссылки разрешены), форматируется (понятный человеку язык, ссылки и т. Д.) И агрегируется (X, Y и Z прокомментировали сообщение P) с PHP-скрипт.
Однако мне все равно придется проходить через каждое сообщение и обрабатывать его (если мой подход не будет полностью неверным). Итак, в чем разница между хранением всего в РСУБД и использованием очереди сообщений (кроме реализации протокола PubSubHubbub)?
Существуют ли более эффективные способы создания такой системы? (Если да, уточните)
Комментарии / предложения / Критика приветствуется. :)
Заранее спасибо!
P.S .: Есть интересная статья о том, как FriendFeed реализует ее (http://bret.appspot.com/entry/how-friendfeed-uses-mysql). Тем не менее, я чувствую, что «хакерство» выталкивает MySQL из его удобного домена (который является просто реляционными данными и какой смысл использовать RDBMS без реляционных данных?)
PPS: Еще одна проблема, связанная с использованием очереди сообщений, которую я вижу (возможно, из-за того, что я новичок в этой технологии), заключается в том, что, как только получатель получает сообщение, оно удаляется из очереди, однако я хочу это сохраняться в течение произвольного количества времени.