关于Youtube的观点数

Chr*_*ini 5 database database-performance ruby-on-rails-3

我正在实施一个应用程序来跟踪帖子被查看的次数.但我想保持一种"聪明"的跟踪方式.这意味着,我不想仅仅因为用户刷新浏览器而增加视图计数器.

因此,如果IP和用户代理(浏览器)是唯一的,我决定只增加视图计数器.到目前为止哪个是有效的.

但后来我想.如果Youtube正在这样做,他们有几个视频有数千甚至数百万的视图.这意味着他们在数据库中的视图表将过多地填充IP和用户代理....

这让我假设他们的视频表具有视图的计数器缓存(即views_count).这意味着,当用户点击视频时,将存储IP和用户代理.此外,视频表中的计数器缓存列也会增加.

每次点击视频.Youtube需要查询视图表并计算条目数.这不会大大影响性能吗?

这是他们怎么做的?或者,还有更好的方法?

Max*_*sky 2

首先,afaik,youtube使用BigTable,所以不用担心查询计数,反正我们不知道数据库的确切结构。

假设您使用关系模型,创建一个列 view_count,但不要在每次刷新时更新它。记录访问并定期更新缓存。

此外,您还可以根据 IP、浏览器、日期和您使用的任何其他信息生成哈希值,以检测这是否是唯一视图,并且不存储整个数据。

另外,您可以使用会话/cookie 来记录正在查看的视图。由于它会过期,因此不会出现内存问题 - 我不相信有人会在一次会话中观看数千个视频