Как соцсети формируют ленту конкретному пользователю

L
На сайте с 10.02.2015
Offline
221
293

Вот допустим пользователь состоит в 20 группах.

Как соцсеть выбирает новые посты для формирования ленты?

Одним SQL-запросом или несколькими?

Как хранятся эти посты?

Все посты одной группы хранятся на одном сервере или на нескольких, если на группу подписано много людей.

IL
На сайте с 20.04.2007
Offline
435
#1
livetv:
Все посты одной группы хранятся на одном сервере или на нескольких, если на группу подписано много людей.

Если опустить вопросы шардирования-масштабирования, то при хранении данных в SQL с использованием связей many-many (пользователь - группа) и 1-many (пост в группе) запрос мог бы выглядеть примерно так:

SELECT * from post
INNER JOIN user2group u2g ON id_group = post.id_group
WHERE id_user = :id_user
ORDER BY post.publish_date DESC
LIMIT 0, 25

где в :id_user "биндится" id-шник текущего пользователя..

В "хайлоаде" всё слегка иначе.. =)

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
S
На сайте с 23.05.2004
Offline
316
#2

Профайл юзера наверняка сидит в каком нибудь кеше. И соответственно вытянуть новые новости можно простым запросом:

SELECT * FROM post WHERE created > user_last_seen_date AND group_id IN(user_group_list)

где user_last_seen_date - из кеша (профайла) последняя дата запроса юзера к новостям. С user_group_list аналогично.

И на крупных проектах дергают не из базы, а из поисковых индексов.

Это просто подпись.
P
На сайте с 27.05.2019
Offline
2
#3

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

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий