这样的日志,会很长啊,比如有1W个软件,平均每个软件下载1W次,这样就有1亿条记录了.如果用我说的方法,我认为应该能很快统计出来.用日志的方法,如果要统计 月下载TOP10,总下载TOP10的话感觉会很慢,因为要 select top 10 count(*) from tableA group by id order by count(*) 还有月排行,周排行,就还要where以下.在1亿条数据里面就慢了用我说的那种,虽然每个月之后,以前的数据就丢失了,但是应该能很快的得到结果直接 select 列名1,列名2,... from tableB order by downtimesByTotal select 列名1,列名2,... from tableB order by downtimesByWeek ...这样就出来了.而且这个tableB也只有1W条数据
软件表关键字段 LastHitTime datatime Hits int DayHits int WeekHits int MonthHits int下载成功以后,执行一下更新点击量的字段declare @LastHitTime datetime select @LastHitTime=LastHitTime from TopWinCMS_Soft where ID=@ID update TopWinCMS_Soft set Hits=Hits+1 where ID=@ID if datediff(D,@LastHitTime ,getdate())<=0 update TopWinCMS_Soft set DayHits=DayHits+1 where ID=@ID else update TopWinCMS_Soft set DayHits= 1 where ID=@ID if datediff(ww,@LastHitTime,getdate())<=0 update TopWinCMS_Soft set WeekHits= WeekHits+1 where ID=@ID else update TopWinCMS_Soft set WeekHits= 1 where ID=@ID if datediff(m,@LastHitTime,getdate())<=0 update TopWinCMS_Soft set MonthHits= MonthHits+1 where ID=@ID else update TopWinCMS_Soft set MonthHits= 1 where ID=@ID
update TopWinCMS_Soft set LastHitTime= getdate() where ID=@ID
月下载量的话 得到DATATIME.NOW的天 看看是不是1号
日 类似
月下载TOP10,总下载TOP10的话感觉会很慢,因为要
select top 10 count(*) from tableA group by id order by count(*)
还有月排行,周排行,就还要where以下.在1亿条数据里面就慢了用我说的那种,虽然每个月之后,以前的数据就丢失了,但是应该能很快的得到结果直接
select 列名1,列名2,... from tableB order by downtimesByTotal
select 列名1,列名2,... from tableB order by downtimesByWeek
...这样就出来了.而且这个tableB也只有1W条数据
LastHitTime datatime
Hits int
DayHits int
WeekHits int
MonthHits int下载成功以后,执行一下更新点击量的字段declare @LastHitTime datetime
select @LastHitTime=LastHitTime from TopWinCMS_Soft where ID=@ID
update TopWinCMS_Soft set Hits=Hits+1 where ID=@ID
if datediff(D,@LastHitTime ,getdate())<=0
update TopWinCMS_Soft set DayHits=DayHits+1 where ID=@ID
else
update TopWinCMS_Soft set DayHits= 1 where ID=@ID if datediff(ww,@LastHitTime,getdate())<=0
update TopWinCMS_Soft set WeekHits= WeekHits+1 where ID=@ID
else
update TopWinCMS_Soft set WeekHits= 1 where ID=@ID if datediff(m,@LastHitTime,getdate())<=0
update TopWinCMS_Soft set MonthHits= MonthHits+1 where ID=@ID
else
update TopWinCMS_Soft set MonthHits= 1 where ID=@ID
update TopWinCMS_Soft set LastHitTime= getdate() where ID=@ID
一个用户表只需加一个下载日志表
需要下列几个字段就可以id,资源id,用户id,下载时间
这些就可以了然后就可以根据时间统计了
1 2009-09-14 12345 否 否这样一个软件一天只产生一条记录然后定时按日期把上一周的记录group by 软件ID,填进周表,同时是否填进周表置为是软件ID 开始日期 结束日期 下载次数
1 2009-09-14 2009-09-20 654321再定时按日期把上个月的记录group by 软件ID,填进月表因为周和月是交叉的,所以判断当日表的某一条记录已经属于上个月又属于上周,且已经填进周表和月表的时候,就可清除日报的数据而后,当周表和月表的数据已经过时之后,还可将其填进总下载并清理掉这样,通过数个表的级联清理,数据的条数可以控制在2N-3N左右