背景:
instagram允许用户查看喜欢任何帖子的人的完整列表
“喜欢的人”的列表是按顺序排列的,这样你跟踪的人总是出现在“喜欢的人”列表的顶部
即使是喜欢1000多人的帖子和关注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
但这似乎会导致大量冗余数据
1条答案
按热度按时间91zkwejq1#
最简单的方法之一是连接likes表和following表并按结果集排序。例如:
当然,如果要避免全表扫描,则必须在likes表和follows表上创建索引。例如:
另一种方法是在likes表中创建一个rank列,并根据它对结果集进行排序。
当然,您必须在创建like时计算并更新rank列