Почитал про схемы формирование лент и нашел только 2.
Первая: формирование общей ленты и вытаскивание из нее событий для формирования персональной
Вторая: Это когда для каждого пользователя создается персональная лента. Т.е в тот момент когда человек что-то постит,берется список всех его подписчиков и каждому в его персонально ленту помещается это событие.
Из этих двух схем,все рекомендуют использовать вторую, но меня в ней напрягает один момент: если к примеру взять 100к пользователей, у которых по 200 друзей, создали по 1 событию в день,это получается 20 млн запросов на запись в БД в день (и это только при 100к событий).Как быть в таких ситуациях (понимаю про преждевременно оптимизацию и т.д, но мне просто интересно)? Или нужно делать все как-то иначе?
Не первый раз уже рассказывает про френдленту. Но ни слова о консистентности данных. Его френдлента сломается при первом же сбое. Подтверждает, что вконтакте сделано иначе, как в фейсбуке не знает.
Когда спрашивают о консистентности, отвечает "Я не знаю как. Ребята, давайте дальше". Думаю второй вариант от него пошел. Вы в рунете читали про второй вариант?
xfg: Где то читал что вконтакте и фейсбук используют вариант с сохранение всех событий в одной таблице,так ли это?Если так то как они масштабируют эту схему?
StynuBlizz: второй вариант - это хранение ленты каждого пользователя. Я думаю, этот вариант придумал Олег Бунин. Кажется, что в реальности это не будет нормально работать. Я не знаю как вконтакте и фейсбуке сделано и не знаю как они масштабируют френдленту, но можно попробовать в англоязычном сегменте погуглить эти вопросы.
xfg: Да погуглил уже,прочитал кучу ответов,в итоге все пишут что в основном используют первый вариант, но вот как доставать из этой общей таблицы (делать SELECT запрос) ленту пользователя ни одного ответа не нашел.