求一设计思想或者数据结构!(做过计数器的朋友应该能搞定!)
小弟作了个广告发布系统,统计广告点击量的时候遇到个问题比较棘手,请各位赐教!
点击量是按独立ip计数的,每独立ip每天点击数超过10次按10次计,所以要记录这个ip到第10次点击的时候的时间,它再点击就要比较这个时间过没过24小时,然后再重新计数。大体就是这么个意思。
我的表初步设计如下:
CREATE TABLE [Sw_Hits] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[AdID] [int] NULL ,
[CpID] [int] NULL ,
[HitTime] [smalldatetime] NULL CONSTRAINT [DF_Sw_Hits_HitTime] DEFAULT (getdate()),
[CusIP] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,--(客户ip)
[SerIP] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[SessionStart] [smalldatetime] NULL ,--(10次后的时间)
[Hits] [int] NULL CONSTRAINT [DF_Sw_Hits_Hits] DEFAULT (0),(总点击量)
[SessionHits] [int] NULL CONSTRAINT [DF_Sw_Hits_SessionHits] DEFAULT (0),(超过10次清0,update sessionstart,累加到总点击量)
CONSTRAINT [PK_Sw_Hits] PRIMARY KEY CLUSTERED
(
[id]
) ON [PRIMARY]
) ON [PRIMARY]
GO
就是来一个ip的访问,我先查询数据库有没有这个ip,没有就insert,有就查sessionstart是否为null,是就查sessionhits是否超过了10,超过就把它清0,sessionstart=getdate(),hits=hits+sessionhits,如果sessionstart不为null就比较时间是否超过24小时,是就重新计数。
这样的方法感觉判断比较麻烦,我一直也没写好,但是这样应该很节省数据库的记录数。
但是公司要点击数报表的话需要每小时、每天统计,以上的流程又要加上时间判断,每过一小时新增一条记录......想想头就大了!
还有个方法是来一条先count一下数据库里有多少条,少于10条就insert,大于10条就比较跟最后一条的时间差是否超过24小时,超过就继续insert,但是这样的话,日点击量如果超过1w独立ip,数据库的记录就超过10w条,我怕数据库顶不住。
各位大哥有没有很好解决这个统计问题的方案??