在MySQL中存储一篇文章的like count

在MySQL中存储一篇文章的like count,mysql,Mysql,按以下格式存储like count是个好主意吗 类似表格: u_id | post_id | user_id 以及一篇文章的计数(u\u id) 如果每个帖子都有上千个赞怎么办?几个月后,like表将充满数十亿行 还有什么有效的方法可以做到这一点呢?用两个词来说,答案是:是的,没问题。(像任何用户为任何帖子所做的那样存储每个帖子的数据) 但我只想把它分成几个问题: 问:是否有其他方法来计数(u\u id)?或者更好: SELECT COUNT(u_id) FROM likes WHERE po

按以下格式存储like count是个好主意吗

类似表格:

u_id | post_id | user_id
以及一篇文章的
计数(u\u id)

如果每个帖子都有上千个赞怎么办?几个月后,like表将充满数十亿行


还有什么有效的方法可以做到这一点呢?

用两个词来说,答案是:是的,没问题。(像任何用户为任何帖子所做的那样存储每个帖子的数据)

但我只想把它分成几个问题:

问:是否有其他方法来计数(u\u id)?或者更好:

SELECT COUNT(u_id) FROM likes WHERE post_id = ?
为什么不呢?您可以将计数保存在
post
表中,并在用户每次喜欢/不喜欢该帖子时增加/减少计数。您可以设置触发器(存储过程)以自动执行此操作。然后,要获得计数器,您只需:

SELECT counter FROM posts WHERE post_id = ?
如果你喜欢之前的问答,并且认为这是个好主意,那么我有下一个问题:

问:那么为什么我们需要
likes
表格呢

这取决于您的应用程序设计和要求。根据您发布的列集:
u\u id、post\u id、user\u id
(我甚至会添加另一列
timestamp
)。您的要求是存储有关用户的信息,以及有关发布的信息。这意味着您可以识别用户是否已经喜欢这篇文章并拒绝多重喜欢。如果你不关心多重喜好或历史时间线和统计数据,你可以删除你的
likes

我在这里看到的最后一个问题是:

几个月后,like表将被数十亿行填满。不是吗

我祝你成功,但我认为你错了99%。要想获得100万条记录,你需要1000名活跃用户(这对于个人创业来说是一个非常好的数字(你正在构建一个完整的应用程序,没有建筑师或设计师参与?),这些用户中的每一个都应该希望每1000条帖子(如果你有)。
我的观点是:幸运的是,您有足够的时间让您的数据库变得非常大,这将损害您的应用程序。在您的表获得10-2000万条记录之前,您不必担心大小和性能。

索引,partitioning@hjpotter92,那么,如果我进行索引和分区,这是否意味着仍然可以像这样存储likes计数?听起来这将是一个很好的问题,因此需要资金来支持它。更可能的是,几个月后,你会有成千上万的喜好。这是一个你没有提到的主要设计考虑因素——一致性要求是什么?您是否希望每次需要显示like计数时都要查询底层数据源(建议的表),还是希望在post级别以某种方式缓存like计数,并且计数值可能并不总是更新到毫秒。此决定将影响您的设计。此外,有关如何显示此信息的用例也将影响您的设计。你在这里提供的信息不多。基于我的上述评论,我觉得这个问题的定义太宽泛了。这是一个很好的答案!非常感谢。这不是很好,但只是我的一些想法。@Alex将计数存储为表中的字段“counter”是在关系数据库中存储非关系数据,这是未来痛苦的原因。您现在已经对表进行了非规范化。