最有效的方式来存储像Facebook和Stackoverflow这样的“喜欢”

时间:2016-11-15 23:08:50

标签: php mysql database performance

在mysql数据库中存储“likes”或“upvotes”的最佳方法是什么?

以下是我的想法:

likes (table)
    id (auto increment)
    post_id
    user_id

但是likes表会有数百万甚至数十亿行,因为每个想要帖子的人都会插入1行,每个人可能会喜欢不止一次,并且有多个用户。

facebook或stackoverflow如何设法在数据库中执行此操作?任何链接或指南表示赞赏。感谢。

2 个答案:

答案 0 :(得分:3)

你不需要一个专栏来进行上下投票吗?

摆脱身份;相反,请使用PRIMARY KEY(post_id, user_id)

首先使用post_id,您可以有效地找到给定帖子的所有投票。同时,user_id的所有投票列表效率较低。如果您需要,那么也有INDEX(user_id)

答案 1 :(得分:-1)

以逗号分隔的用户ID存储字符串(或json)。 不需要额外的表,只需将其作为列添加到Post。 额外的列可以用于喜欢的总数(计数)。