2010-06-07 156 views
1

我们假设我们有高流量项目(管网站),应该使用此选项提供排序(NOT IN REAL TIME)。视频数量约为200K,关于视频的所有信息都存储在MySQL中。每日视频观看次数约为1.5KK。作为文书我们有硬盘驱动器(文本文件),MySQL,Redis如何存储和收集数据,以挖掘过去24小时,过去7天,过去30天,过去365天最多查看的信息?

Views 
top viewed 
top viewed last 24 hours 
top viewed last 7 days 
top viewed last 30 days 
top rated last 365 days 

我应该如何存储这些信息?

第一个想法是将所有访问记录到文本文件(每小时单个文件,例如visits_20080101_00.log)。在每个小时的开始计算前一小时的每个视频的视图,并将这些信息插入到MySQL中。然后重新计算总计(最近24小时)并更新表格中的统计数据。在每天开始时,我们必须做同样的事情,但最近7天,最后30天,最后365天重新计算。这种方法对我来说似乎很差,因为我们必须存储每个视频最近365天的信息才能进行正确的计算。

有没有其他好方法?可能,我们必须为此选择另一种工具?

谢谢。

+0

我假设您使用的文本文件,以避免加载MYsql。 – rerun 2010-06-07 15:12:57

+0

是的,确切地说。我可以使用INSERT或INSERT DELAYED,但它会导致MySQL高负载。 – Kirzilla 2010-06-07 15:30:50

回答

0

如果绝对精度不重要,您可以总结超过2个单位的信息。

您将存储最近1-2小时的单个视图,最后1-2天的每小时视图(每小时一个值)以及每日视图(每天一个值)。

“1-2”表示您存储,直到您有两个单位已满,然后总结早些时候。