gpt4 book ai didi

mysql - 帖子的多重评级系统(喜欢,爱,星)

转载 作者:可可西里 更新时间:2023-11-01 07:47:59 28 4
gpt4 key购买 nike

我需要开发一个帖子投票系统。每个用户都可以通过点击拇指图标来喜欢一个帖子,通过点击壁炉图标来喜欢一个帖子,将来也许我有一个明星系统作为替代方案。

我正在寻找更好的解决方案来实现这个系统,目前,我有两种想法:

  • 1)每个投票系统一张表
tbl like

id
post_id
user_id
value // value even 1

tbl love

id
post_id
user_id
value // value even 1

tbl star

id
post_id
user_id
value // value between 1 and 5

  • 2)所有投票系统一张表
tbl rate

id
post_id
user_id
type // 'like' or 'love' or 'star'
value // value between 1 and 5

哪个是更好的解决方案?

另外,当我查询多个帖子时,SELECT 和每个投票的总和(或平均值)不好,也许最好在帖子表中保存当前喜欢/爱/明星的总和(或平均值)加快查询速度,然后在每个新的 like/love/star 上更新帖子?

最后一件事,让用户看到他是否已经投票了一些帖子,像这样的查询是一个很好的解决方案吗? SELECT post_id FROM rate WHERE user_id = <MYUSERID> AND post_id IN (<ARRAYOFPOSTS>)然后将检索到的 post_id 与主查询的 post_id 进行比较?

谢谢!

最佳答案

正如 Eric 所提到的,从性能角度来看,拥有多个表通常不是一个好主意。

对于每张表,MySQL都需要维护内部数据结构、数据字典、文件描述等...

使用解决方案 2

就您的应用程序的 future 性能和可扩展性而言,这将是最佳解决方案。您无需在扩展投票时支持全新的表,只需让您的应用程序在前端显示一种新的投票类型。

当获取给定文章的统计信息时,您可以像您所说的那样,在每次用户投票时保存此数据,而不是每次都获取完整计数,但是性能提升根本不会很明显,而是使一些好的索引可以在需要时加快速度。

如果您希望向用户显示他是否已为给定的帖子投票,我建议您只需检查您在解决方案 2 中描述的 rate 表。如果您希望限制应用程序的查询量你可以像你说的那样获取页面上的所有帖子,然后查询这些帖子。然而,我会说这里的性能提升也是微乎其微的。

一些好的索引将在可预见的 future 解决您的大部分性能问题。通常只有在整个数据库无法处理所有流量时才需要拆分数据。 This article Airbnb 团队给出了可能出现这种情况的想法。

一个小技巧是不要过度考虑应用程序。通常最好从小事做起,用简单的方法做事。这样您就不会引入不必要的问题。一旦应用程序增长,问题就会自然而然地出现,您将在它们出现时解决它们。

关于mysql - 帖子的多重评级系统(喜欢,爱,星),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57161787/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com