我正在建立一个广告分类网站,在那里我想存储每个广告的浏览量的计数,我希望能够在图表中显示在以后的日期,按日和月等。对于每个用户和他们的每个广告。我正在为如何最好地实现mysql数据库来存储每个广告的大量数据而苦苦挣扎。
我将为页面视图创建一个表,如下所示,它将为每个广告的每个视图存储一条记录,例如,如果advert (id 1)有200个视图,则该表将存储200条记录:
Advert_id (广告的唯一标识)
date_time (查看日期和时间)
ip_address (观看广告的人的唯一ip地址)
page_referrer (推荐人页面的url)
如上所述,我将创建的功能,为每个成员的网站,以查看他们的每个广告的视图统计图表,以便他们可以看到他们的广告有多少总浏览量,也有多少他们的广告每天有多少浏览量(在2个给定的日期之间),也有多少每月每个广告有多少浏览量。我将通过按date_time字段分组来完成此操作。
如果我的网站变得相当大,例如有40,000个广告,每个广告平均有3,000个页面浏览量,这意味着表中有1.2亿条记录。这个是不是太大了?生成图形的mysql查询会非常慢吗?
你认为上面的表和方法是存储这些广告视图统计数据的最好方法,还是有更好的方法来做到这一点?
发布于 2011-11-17 23:39:10
除非你真的需要存储所有这些数据,否则在观看广告时增加计数可能会更好。因此,每个广告只有一行(或者甚至是广告行中的一列)。
另一种选择是将其保存到文本文件中,然后脱机处理它,但通常更好的做法是在获得数据时对其进行处理,并将其合并到应用程序流程中。
如果您确实需要保存所有这些数据,那么每周轮换一次日志表(在处理之后)可能会减少无限期地存储所有这些信息的开销。
发布于 2011-11-17 23:45:49
我的网站每天有50.000个的访问者,我和你的表格是一样的。
表正在以200-500MB/天的速度增长,但我每天都能清理表。
最好的选择是制作第二个表,每天清点访客人数,将结果添加到第二个表中,并刷新第一个表。
第一个表示例:
第二个表格示例(用于图形):
用于统计unqiue访问者的示例SQL查询:
SELECT
advert_id,
Count(DISTINCT ip_address),
SUBSTRING(Date,1,10) as Date
FROM
adverts
GROUP BY
advert_id,
Date问题不在于性能(MySQL ISAM引擎相当智能和快速),问题在于存储如此庞大的数据。
90%的统计工具(甚至google analytics或webalyzer)每天只做一次图表,而不是实时的。
一个很好的想法是使用函数ip2long()将IP存储为INT
https://stackoverflow.com/questions/8169818
复制相似问题