为了加快处理的速度,我可能要部署很多个程序到不同的服务器上。
这些程序都是从数据库中取任务(一条数据是一个任务),做完相关的任务后更新任务的状态。 DataBase tablename column type length Default or is NULL
StatusData WallETaskInfomation AutoId bigint identity NO
StatusData WallETaskInfomation TaskFileName varhcar 50 NO
StatusData WallETaskInfomation Status varchar 10 NO
StatusData WallETaskInfomation UserId int NO
StatusData WallETaskInfomation UserName varhcar 50 NO
StatusData WallETaskInfomation StartTime smalldatetime NO
StatusData WallETaskInfomation FinishTime smalldatetime NO
StatusData WallETaskInfomation LastUpdate smalldatetime getdate()
StatusData WallETaskInfomation ProcessingProgram Varchar 50
比如程序有p1~p20 要保证P1 正在处理的任务,其他的程序P2~P20不会去处理。P1如果这个程序死掉了 它的任务可以重新被
P1~P20处理。
并且P1~P20 只是一套程序。
这些程序都是从数据库中取任务(一条数据是一个任务),做完相关的任务后更新任务的状态。 DataBase tablename column type length Default or is NULL
StatusData WallETaskInfomation AutoId bigint identity NO
StatusData WallETaskInfomation TaskFileName varhcar 50 NO
StatusData WallETaskInfomation Status varchar 10 NO
StatusData WallETaskInfomation UserId int NO
StatusData WallETaskInfomation UserName varhcar 50 NO
StatusData WallETaskInfomation StartTime smalldatetime NO
StatusData WallETaskInfomation FinishTime smalldatetime NO
StatusData WallETaskInfomation LastUpdate smalldatetime getdate()
StatusData WallETaskInfomation ProcessingProgram Varchar 50
比如程序有p1~p20 要保证P1 正在处理的任务,其他的程序P2~P20不会去处理。P1如果这个程序死掉了 它的任务可以重新被
P1~P20处理。
并且P1~P20 只是一套程序。
并且我们产品中都有这样的处理程序。 大家有没有更好的处理方法呢
begin tran
declare @id bigint
select @id=(select top 1 autoid from tb
where
status='未开始状态'
or (starttime>dateadd(hh,-1,getdate()) and status='执行中状态') --'P1如果这个程序死掉了的情况'
order by lastupdate desc)
update tb set StartTime =getdate(),status='执行中状态' where autoid=@id
select * from tb where autoid=@id
commit