2

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

目前,网站上的每个产品都有评论区,会员可以发表评论和点赞。我需要知道每个成员发表了多少评论,他的每条评论获得了多少赞。当然,出于分析目的,我还需要知道谁也喜欢哪些评论(部分原因是为了防止用户多次喜欢评论)。

对当前评论模块实现 Like 系统的简单方法是在数据库中创建一个新表,该表具有 CommentID 和 UserID 的外键。然后,对于用户给评论的每一个“赞”,我都会在这个新表中插入一行,其中包含目标评论 ID 和用户 ID。

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

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

4

2 回答 2

2

为了可扩展性,不要同一个表中包含与其他内容相同的计数列。这是“垂直分区”有益的罕见情况。为什么?LIKEs/UNLIKEs 会来得又快又猛。如果执行递增/递减的代码碰到用于其他内容的表(例如评论的文本),则两者之间将出现不可接受的争用量。

这个技巧是能够扩展到 Facebook 级别的许多步骤中的第一步。其他提示不是来自免费论坛,而是来自你必须聘请的聪明工程师团队才能达到那个水平。(提示:分片、缓冲、显示估计等)

于 2016-06-18T17:10:06.000 回答
1

您主要关心的是很多计数,因此简单的做法是在您的评论表中保留一个单独的计数。

然后,您可以创建一个TRIGGER基于喜欢/不喜欢增加/减少计数的方法。

这样,您只需使用大表来确定用户是否已经投票。

于 2016-06-10T14:30:54.550 回答