如何设计一个高效的Like系统?

时间:2016-06-10 14:27:01

标签: php mysql optimization database-design system-design

我正在尝试创建一个类似于Facebook的Like / Different系统,用于网站的现有评论部分,我需要帮助设计系统。

目前,网站上的每个产品都有一个评论部分,会员可以发帖评论。我需要知道每个成员都发布了多少评论,他的每条评论都收到了多少评论。当然,我需要知道谁也喜欢什么评论(部分是因为我可以阻止用户多次喜欢评论)用于分析目的。

将Like系统实现到当前注释模块的简单方法是在数据库中创建一个具有CommentID和UserID外键的新表。然后,对于用户给出评论的每个“喜欢”,我会使用目标评论ID和用户ID向此新表插入一行。

虽然这可能有效,但是大量的评论和用户会导致这个表快速增长,并且从这个巨大的表中检索记录并对其进行计数将变得缓慢且低效。我可以索引其中一列,但我不知道它会有多么有效。该网站有超过一百万条评论。

我正在使用PHP和MySQL。对于像这样的具有庞大数据库的系统,我应该如何设计Like系统以使其更加优化和稳定?

2 个答案:

答案 0 :(得分:1)

您的主要关注点将是很多,所以最简单的方法是在评论表中单独计算。

然后你可以创建一个TRIGGER,根据喜欢/不同的方式递增/递减计数。

这样你只能使用大表来确定用户是否已经投票。

答案 1 :(得分:0)

对于可伸缩性, not 在同一个表中包含count列与其他内容。这是一种罕见的情况,其中"垂直分区"是有益的。为什么? LIKE / UNLIKE会变得快速而激烈。如果执行增量/减量的代码命中用于其他事物的表(例如注释的文本),则两者之间将存在不可接受的争用量。

此提示是能够扩展到Facebook级别的众多步骤中的第一步。其他提示将来自,不是来自免费论坛,而是来自智能工程师团队,你必须雇用才能达到这个水平。 (提示:分片,缓冲,显示估计等)