将视图计数存储到数据库中

时间:2014-10-27 14:00:25

标签: mysql data-modeling erd

我想在数据库(MySQL)中存储视频视图计数

我想存储每个访问者的IP地址(以及其他一些信息)

所以我用(VidoId,Ip,Date,UserAgent)创建了一个表

现在我的问题是每次我想要显示视图计数我必须执行此查询:

SELECT Count(*) FROM Views WHERE VideoId = xxx

我知道我可以将它存储到我的视频表格的列中,并在每个插页上更新它。但这会产生碎片并且一致地破坏数据,也不可能用EER对其进行建模。 我也知道我可以缓存它。

我只是想知道有没有办法有效地和可模拟地做到这一点?

感谢。

2 个答案:

答案 0 :(得分:5)

处理此问题的典型方法是创建一个聚合实体数据的单独表。在您的情况下,它将是一个video_aggregate表,其中包含以下列:

VideoId(主键),NumberOfViews

我认为以下是一些重大优势,而不是添加另一个表的努力:

1)非常快速的阅读,如果你需要将它与视频数据相结合,只需要一个简单的连接

2)每次有人观看视频时,您的视频表都没有锁定/阻止功能。实际上,对视图和video_aggregate表的更新都可能(并且可能应该)是异步的。它可以容忍一点延迟。

3)视图的数量不是视频的属性 - 根本不描述该实体。它描述了用户活动。这可能看起来很迂腐,但它对于专家建模至关重要,并且当你在关系数据库模型中采取这种关注时,它会随着时间的推移发挥得很好。

P.S。将您的表格称为比“视图”更具体的内容,例如“VideoViews”。

答案 1 :(得分:0)

要有效地执行此操作,请在Views(VideoId)

上创建索引
create index idx_views_videoid on Views(VideoId);

对于大多数应用程序来说,查询应该足够快。