【问题标题】:MySQL photo like count. How to store & count millions of likes for photos?MySQL 照片喜欢计数。如何存储和统计数百万的照片点赞数?
【发布时间】:2014-10-15 07:04:01
【问题描述】:

我正在尝试构建类似 Instagram 的应用,但不知道如何计算每张照片的点赞数。

选项 1:

user Table
- user_id
- username
...

photo Table
- photo_id 
- user_id
- image_path
...

photo_like_relation Table
- like_id
- photo_id
- user_id 
...

因此,通过此设置,我将能够在计算类似查询的结果后检索类似计数。

"SELECT * from photo_like_relation WHERE photo_id = x"

选项 2:

user Table
- user_id
- username
...

photo Table
- photo_id 
- user_id
- image_path
- like_count **
...

photo_like_relation Table
- like_id
- photo_id
- user_id 
...

使用选项 2,我将如何检索 like_count,但我觉得如果系统中有任何失误,这可能会变得混乱? photo_like_relation 的 like_count 总数与 COUNT() 总数可能不匹配?

那么哪种方法更好呢?还是有更好的方法?假设应用中发布了数百万张照片/点赞。

我正在尝试重新创建一个流行的页面功能,例如 Instagram,它基本上会从最后 X 分钟获取最多喜欢的照片。我觉得这对系统来说是一个巨大的负担,要遍历过去一小时发布的所有照片,并计算 photo_like_relation 表中存在多少条记录以及相应的 photo_id。

想法?想法?提前致谢。

【问题讨论】:

    标签: php mysql sql


    【解决方案1】:

    使用COUNT()函数:

    SELECT COUNT(*) 
    FROM photo_like_relation
    WHERE photo_id = x
    

    确保您在photo_id 列上有一个索引,这应该非常有效。

    【讨论】:

    • 是的。一旦拥有数十万用户,您就需要进一步优化,但您可能应该回来询问我们何时会发生这种情况,而不是过早地尝试优化。
    • 感谢您的回复。所以如果我在 1000 多行上运行 COUNT(*) 仍然很快,比如每张照片上大约有 300 多个喜欢?
    • 如果你在WHEREGROUP BY列的列上有索引,相信计数信息在索引中,所以很快。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多