我正在建立一个广告的分类广告网站,我希望存储每个广告的观看次数的计数,我希望能够在日后的日期和月份等图表中显示每个广告的数量。和他们的每个广告。我正在努力决定如何最好地实现mysql数据库,以便为每个广告存储大量数据。
我将为页面视图创建一个表格,如下所示,它将为每个广告存储每个视图的记录,例如,如果advert(id 1)有200个视图,则表格将存储200条记录:
Advert_id(广告的唯一ID)
date_time(日期和时间)
ip_address(查看广告的人的唯一IP地址)
page_referrer(推荐人页面的网址)
如上所述,我将为网站的每个成员创建功能,以查看每个广告的观看统计信息的图表,以便他们可以查看每个广告的总观看次数,以及他们的广告每天(在两个给定日期之间)观看,以及每个广告每月有多少观看次数。我将通过date_time字段进行分组来完成此操作。
如果我的网站变得非常大,例如有40,000个广告,而且每个广告平均有3,000个网页浏览量,那就意味着该表有1.2亿条记录。这太大了吗?并且生成图表的mysql查询会非常慢吗?
您是否认为上述表格和方法是存储这些广告查看统计信息的最佳方式,还是有更好的方法来执行此操作?
答案 0 :(得分:0)
除非您确实需要存储所有数据,否则在查看广告时增加计数可能会更好。因此,每个广告只有一行(甚至是广告行中的一列)。
另一种选择是将其保存到文本文件中,然后离线处理它,但通常最好在处理数据时将其合并到应用程序进程中。
如果你真的需要保存所有这些数据,那么每周轮换一次日志表可能(在处理之后)会减少无限期存储所有这些信息的开销。
答案 1 :(得分:0)
我每天都在与50.000 唯一访问者的网站合作,我和你有相同的表格。
表正在增长~200-500 MB /天,但我每天都能清洁桌子。最好的选择是制作第二张桌子,每天计算访客数量,将结果添加到第二张桌子,然后冲洗第一张桌子。
第一个表格示例:
第二个表格示例(图表):
计算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%的统计工具(甚至谷歌分析或网络分析器)每天只制作一次图表,而不是实时制作。
非常好的想法是使用函数ip2long()
将IP存储为INT