繁体   English   中英

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

[英]How to design an efficient Like system?

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

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

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

尽管这可能行得通,但大量的注释和用户将导致此表快速增长,并且从此巨大表中检索记录并进行计数将变得缓慢且效率低下。 我可以为任一列建立索引,但是我不知道它的有效性。 该网站有超过一百万条评论。

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

您主要关心的是很多计数,因此,要做的一件简单的事情就是在注释表中保留一个单独的计数。

然后,您可以创建一个TRIGGER ,根据喜欢/不喜欢增加/减少计数。

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

对于可扩展性, 包括与其他事物相同的表计列。 这是一种罕见的情况,其中“垂直分区”是有益的。 为什么? 喜欢/不喜欢的人会来得非常快。 如果执行递增/递减的代码命中用于其他用途的表(例如Comment的文本),则两者之间的争用量将不可接受。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM