Фон :
- Instagram позволяет пользователям просматривать полный список людей, которым понравился любой пост
- Список «лайкеров» оценивается такчто люди, за которыми вы следите, всегда отображаются сгруппированными вверху списка лайков
- Это работает мгновенно даже для постов с более чем 10 миллионами лайков и для пользователей, которые подписываются на 1000+ человек
Как мне смоделировать мои данные (в идеале в MySQL) для репликации этого типа функциональности?
Что я пробовал:
Этопросто вернуть лайки пользователям, за которыми я следую вверху постранично :
SELECT uid, date,
EXISTS(SELECT 1 FROM Follows a WHERE a.uid = "1" and a.followsUid = Likes.uid limit 1) as youFollow
FROM Likes WHERE pid = 30
ORDER BY youFollow DESC, date DESC LIMIT 10
Проблема этого подхода заключается в том, чтопо-прежнему не будет отображаться всех пользователей, которым я подписан, которым понравился пост в верхней части списка - только пользователи, которым я подписан на данную страницу (ограничение 10).
Есть лиЕсть ли способ добиться этого, не сканируя каждую строку «как» для сообщения?
Единственный другойПодход, который я могу придумать, - это модель «веер» / «входящие», когда пользователи подписываются на людей, которым они следуют.Затем я мог бы запросить что-то вроде select * from LikeEvents where uid IN (people I follow) and postId = pid
, но, похоже, это приведет к большому количеству избыточных данных