一种定时任务的触发方法和装置的制造方法

文档序号:9235339阅读:176来源:国知局
一种定时任务的触发方法和装置的制造方法
【技术领域】
[0001]本申请涉及计算机技术领域,尤其涉及一种定时任务的触发方法和装置。
【背景技术】
[0002]在主动服务产品中,一般通过查询数据库中到期的记录,触发超时判定任务。为了能无延迟触发定时任务,需要时刻全表扫描出到期的记录,如此频繁的大量重复查询,会导致数据库负载过高。例如,假定扫描线程的扫描间隔时间固定为2毫秒(ms),即,每秒执行500次SQL (结构化查询语言)查询,假设任务表中每分钟到期100条任务,那么,为了触发100条任务,扫描线程每分钟要执行3万次查询,极大地浪费了数据库资源。
[0003]另一方面,由于扫描间隔时间(T)是固定的,那么定时任务会存在T时长的延迟。在海量定时任务下,这种延迟会导致任务的堆积。例如,主动服务产品中,假设每天有2000万物流订单,假设平均每个订单有5个定时任务,那么每天需要触发的定时任务大约有I亿个,平均每秒约有1157个任务到期,高峰时期可达到每秒到期10万个任务。按上述例子中的扫描间隔时间进行扫描,假设每次批量查询100条任务,那么每秒最多可以扫描出5万条任务,将不可避免地导致任务堆积。
[0004]综上所述,为避免造成数据库资源浪费,要求扫描间隔时间越长越好,而为保证时效性,避免当数据量大时任务堆积,又要求扫描间隔时间越短越好,鉴于以上原因,需要合理设置扫描间隔时间。

【发明内容】

[0005]本申请的主要目的在于提供一种定时任务的触发方法和装置,以解决现有技术存在的定时任务的扫描间隔时间的设置问题,其中:
[0006]本申请提供了一种定时任务的触发方法,包括:
[0007]步骤110:从任务索引集合中加载一个任务时段要执行的定时任务的任务索引,所述任务索引中包含一个或多个索引数据,其中,每个索引数据对应一个或多个执行时间相同的定时任务,每个索引数据中记录了所对应的一个或多个定时任务的任务标识以及所述一个或多个定时任务的执行时间;步骤120:获取执行时间排在最前的索引数据;步骤130:判断所述执行时间是否大于当前时间;步骤140:如果所述执行时间大于当前时间,则将当前时间至所述执行时间之间的时间段设定为休眠时间;步骤150:判断所述休眠时间是否结束;步骤160:如果所述执行时间小于等于当前时间或者所述休眠时间结束,则从数据库中扫描所述索引数据对应的一个或多个定时任务的业务数据,并触发所述一个或多个定时任务;针对剩余的索引数据,执行步骤120-步骤160直至所有索引数据都已被触发为止。
[0008]本申请的另一方面提供了一种定时任务触发装置,包括:加载模块,用于从任务索引集合中加载一个任务时段要执行的定时任务的任务索引,所述任务索引中包含一个或多个索引数据,其中,每个索引数据对应一个或多个执行时间相同的定时任务,每个索引数据中记录了所对应的一个或多个定时任务的任务标识以及所述一个或多个定时任务的执行时间;获取模块,用于获取执行时间排在最前的索引数据;第一判断模块,用于判断所述执行时间是否大于当前时间;设定模块,用于如果所述执行时间大于当前时间,则将当前时间至所述执行时间之间的时间段设定为休眠时间;第二判断模块,用于判断所述休眠时间是否结束;扫描及触发模块,用于如果所述执行时间小于等于当前时间或者所述休眠时间结束,则从数据库中扫描所述索引数据对应的一个或多个定时任务的业务数据,并触发所述一个或多个定时任务。
[0009]与现有技术相比,根据本申请的技术方案,通过对定时任务建立任务索引集合,能够根据任务索引动态地调整扫描时间间隔,保证每个任务的触发最多只需要消耗一次查询,避免重复和无效的查询,从而避免资源浪费,提高定时任务系统的处理能力,不会造成定时任务的处理延迟。并且,能够动态地调整扫描线程数,避免任务堆积。
【附图说明】
[0010]此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
[0011]图1是根据本申请实施例的定时任务的触发方法的流程图;
[0012]图2是根据本申请的一个实施例的将一个任务索引中的索引数据采用堆排序的方式按执行时间进行排序的示意图;以及
[0013]图3是根据本申请实施例的定时任务的触发装置的结构图。
【具体实施方式】
[0014]本申请的主要思想在于,对定时任务根据任务的执行时间建立任务索引集合,从而根据任务索引动态调整扫描时间,以使每次查询至少触发一个定时任务,并根据任务数量自适应分配扫描线程,以确保定时任务能够无延迟和可靠地触发。
[0015]为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0016]根据本申请的实施例,提供了一种定时任务的触发方法。
[0017]参考图1,图1是本申请实施例的定时任务的触发方法的流程图。
[0018]在步骤SllO处,从任务索引集合中加载一个任务时段要执行的定时任务的任务索引。
[0019]所述任务索引集合中可以包含一个或多个任务索引,其中,每个任务索引中包含一个任务时段内要执行的定时任务的索引数据,每个任务索引中包含一个或多个索引数据,其中,每个索引数据对应一个或多个执行时间相同的定时任务,每个索引数据中记录了所对应的一个或多个定时任务的任务标识集合以及所述一个或多个定时任务的执行时间,每个任务标识用于标识数据库中的一个定时任务,即,该定时任务在数据库中的任务标识。所述一个或多个任务的执行时间可以是在该任务时段内的相对时间,例如,相对于该任务时段的开始时间的相对执行时间。其中,每个任务时段对应的任务索引可以以该任务时段的开始时间为时间索引。应该理解,也可以使用任何其他适当的方式来定义该相对时间。
[0020]任务索引集合可以是预先建立的,可以根据定时任务的执行时间(B卩,该任务的预定执行时间)以及在数据库中的任务标识建立任务索引集合,在定时任务的业务数据写入数据库时,可以根据每个定时任务的执行时间和在数据库中的任务标识,创建每个定时任务的索引数据,并写入任务索引集合中。其中,执行时间相同的定时任务可以创建为一个索引数据,即,每个索引数据中记录执行时间相同一个或多个的定时任务、该相同的执行时间以及所述一个或多个的定时任务的任务标识集合。
[0021]根据本申请的一个实施例,预先建立的任务索引集合可以保存在缓存中,优选地,可以保存在持久化缓存中,例如,具有持久化特征的结构数据存储系统Tair。
[0022]具体地,可以先根据定时任务的数量确定任务时段,再按照确定的任务时段建立任务索引集合,其中,一个任务时段内要执行的定时任务的索引数据可以记录在一个任务索引中,也就是说,每个任务时段内要执行的定时任务分别对应一个任务索引,当进行任务扫描时就可以预先加载一个任务时段的任务索引。
[0023]例如,可以确定一分钟为一个任务时段,按照分钟建立的任务索引集合可以为:
[0024]到期时间:2013-12-1212:00:00
[0025][9]: {101}
[0026][8]: {103, 105}
[0027][2]: {104}
[0028]到期时间:2013-12-1212:01:00
[0029][21]: {102}
[0030]以上为以I分钟为一个任务时段建立的任务索引集合中的一部分,包括2013-12-1212:00:00 ?12:01:00 的 I 分钟时间内(B卩,到期时间在 2013-12-1212:00:00 ?12:01:00内)要执行的定时任务的任务索弓丨,以及2013-12-1212:01:00?12:02:00的I分钟内要执行的定时任务的任务索引。其中,101、103、105、104为定时任务的任务标识,[9]、
[8]、[2]分别为任务标识集合{101}、{103,105}、{104}对应的执行时间在该任务周时段内的相对时间,即,表示任务101、103和105、104的执行时间分别在该任务时段的第9秒、第8秒、第2秒,它们的实际执行时间分别为2013-12-1212:00:09,2013-12-1212:00:08,2013-12-1212:00:02。同理可知 2013-12-1212:01:00 ?12:02:00 的 I 分钟时间内的任务索引以及任务的对应关系。
[0031]根据本申请的一个实施例,当有新建的定时任务时,可以在新任务的业务数据写入数据库的同时,根据该定时任务的执行时间,将该定时任务的索引数据添加到任务索引集合中的相应的任务索引中,从而更新任务索引集合。
[0032]例如,新增加了两个定时任务,任务标识分别为106和107,执行时间分别为2013-12-1212:00:09和2013-12-1212:01:18,则将这两个定时任务
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1