大家好,我有这样一个需求,不知道能否实现呢!
我表里有这样一些数据,它们是有过期时间的。
而我呢,有这样一个需求,就是在“还有10秒”过期时,我要做一些事情的。
而我又是做web开发的,如果没有用户打开网站页面,就不可以检查到还有10秒就要过期了,我没办法去触发。
在sqlserver中我该怎么做呢。请高手们指点!
我表里有这样一些数据,它们是有过期时间的。
而我呢,有这样一个需求,就是在“还有10秒”过期时,我要做一些事情的。
而我又是做web开发的,如果没有用户打开网站页面,就不可以检查到还有10秒就要过期了,我没办法去触发。
在sqlserver中我该怎么做呢。请高手们指点!
但如果LZ的数据量过大的话,势必会影响服务器的性能..
所以,访问量,数据量等等方面的东西能说清楚一点就好了.
说实话,我以前没做过这东西,而客户要求高,要求必须 信息还有10秒过期时,对信息进行处理。如果用sqlserver作业来做,必须1秒钟检查一次,虽然客户有自己的服务器,不过我NND的心理就是不踏实,做立不安,这不是开玩笑吗?这么能做吗?
declare @i int
set @i=0
while @i<60
begin
exec 你每秒要做的处理(封装成存储过程,方便调用)
waitfor delay '00:00:01' --延时1秒
set @i=@i+1
end-----------------------------------------------------------------------------------------------------
我想知道,这么写将会有什么后果
这类数据,要记录它的生命开始时间,即要有datateime列记录logDatetime,然后再增加计算列timeSpan int,计算当前时间与logDatetime的差值,并建立索引.没人触发你的web page时,数据当然不会变化,从数据值上来看,也看不出失效。但在你的操作中,加上认为其是失效的代码。
比如 where timeSpan < 10不合这个条件的就是无效数据。 不一定要更新状态或者删除这样的记录。然后,job定期比如2小时,删除这样的无效记录,或更新状态, 这样整体与细节的配合,使得设计得当。
对过期时间加索引
启动一个作业,每秒执行,检查当前时间与过期时间差值小于等于10S的记录,将这些记录插入到另一张表b里,然后删除a里的这些数据
对b里的记录做你需要的操作,然后删除
我想实现的不是删除,或,在WEB视图中显示有效数据的问题。
我可以确认,我要实现的功能,是实时的。必须知道是“哪条”数据,还将在10秒钟后失效,而我必须要做些事。在数据库上我想也只有做业可以这么干了。
我能不利用别的程序来操作数据库,达到1秒钟一次,我朋友说用VB开发个windows程序,在服务器端运行。来负责这事务。有没有理好的办法。
CREATE TABLE [dbo].[time1]([shijian] [datetime] NOT NULL)
declare @i int
set @i=0
while @i <60
begin
insert into dbo.time1 select getdate()
waitfor delay '00:00:01' --延时1秒
set @i=@i+1
end select * from time1执行正常,在1分钟内select可以得到最新的记录,cpu也是正常的
declare @i int
set @i=0
while @i <60
begin
insert into dbo.time1 select getdate()
waitfor delay '00:00:01' --延时1秒
set @i=@i+1
end 的方法来每秒插入一条记录,就可以利用触发器来完成后面的操作了吧。对触发器不是很熟悉了
两者权衡,可参考如下的方案:1.数据库建一job,每日0点运行,选出1日内将要到期的数据,插入候选表
2.页面建一个timer,每秒检测候选表的数据。
3.用户加载页面时,判断:如果候选表为空,则不调用timer,否则启动timer。
4.timer侦测到有数据在10s之内,提示做某些事情,并将该数据从候选表中删除。
要求在没有人访问WEB页面时也要进行程序操作。
那就要抛开WEB页面,也就是说纯用数据库作业实现,只要你的数据表数据不多,每10秒执行下检查(实际是个查询)对性能影响不会很大,必要时可以加必要的索引提高性能