使用SQL Server2005触发器做站点IP、PV预统计
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
上图是一个WEB站点访问日志表,记录了访问对象的相关信息。现在要求增加一个站点每天的IP、PV统计功能,数据量小时直接对Web_AccessLogTB表中的数据进行统计即可,若数据量比较大,这样做就不合适了。解决方法是进行预统计:在用户查看统计之前就已经预先统计好了,用户查看时只是显示下结果而已。 预统计的方式又可分成两种:同步或异步。同步可以写个存储过程来完成,添加访问日志的同时进行预统计;异步是将添加访问日志和预统计两个过程分开,后者可由其他程序来完成,例如Windows服务、触发器等等。显然异步比较合适,下边我们就用触发器来完成。 上图为预统计表,记录每天的IP和PV量。现在要解决的一个问题是IP的统计,到目前为止,每个IP都必须先扫描一次Web_AccessLogTB表,才知道它是不是首次访问,是则IPCount字段加1,这样效率太差了。我们再建一个辅助表(Web_IPLogTB)来解决这个问题: Web_IPLogTB表记录每天的访问IP,一个IP只记录一次,每天清空一次,这样扫描就快多了。下边是我们的触发器: 程序代码
Create TRIGGER [Web_UpdateIPAndPVTG] ON [dbo].[Web_AccessLogTB] AFTER Insert AS BEGIN IF @@rowcount>0 BEGIN DECLARE @clientip nvarchar(50), @recdatetime datetime DECLARE @ipcount int Select @clientip=ClientIP,@recdatetime=RecDateTime FROM inserted SET @recdatetime=DATEADD(day,DATEDIFF(day,0,@recdatetime),0) IF NOT EXISTS(Select TOP 1 * FROM Web_AccessLog2TB Where RecdateTime=@recdatetime) BEGIN--新增 Insert INTO Web_AccessLog2TB(RecDateTime,IPCount,PVCount) VALUES(@recdatetime,1,1) TRUNCATE TABLE dbo.Web_IPLogTB --每天清空 Insert INTO dbo.Web_IPLogTB(RecDateTime,ClientIP) VALUES(@recdatetime,@clientip) END ELSE BEGIN Select @ipcount=count(1) FROM Web_IPLogTB Where RecdateTime>=@recdatetime AND ClientIP=@clientip IF @ipcount=0 BEGIN--更新IP和PV Update Web_AccessLog2TB SET IPCount=IPCount+1,PVCount=PVCount+1 Where RecdateTime=@recdatetime Insert INTO Web_IPLogTB(RecDateTime,ClientIP) VALUES(@recdatetime,@clientip) END ELSE--只更新PV Update Web_AccessLog2TB SET PVCount=PVCount+1 Where RecdateTime=@recdatetime END END END 该文章在 2011/3/13 0:31:21 编辑过 |
关键字查询
相关文章
正在查询... |