数据处理方法、装置、电子设备及计算机可读存储介质与流程

文档序号:32250860发布日期:2022-11-19 01:18阅读:31来源:国知局
1.本技术涉及数据处理领域,特别是涉及一种数据处理方法、装置、电子设备及计算机可读存储介质。
背景技术
::2.在业务开发过程中,经常会遇到在较短的时间内,需要处理大量数据的业务场景,为了满足业务需求,通常需要启动多个任务实例同时处理这些数据,以提高数据处理效果。其中,这多个任务实例可以运行在一台服务器中,也可以运行在多台服务器中。3.相关技术中,首先将大量待处理数据分到多个数据表中;然后建立多个任务实例与多个数据表之间的对应关系,其中,每个任务实例对应一个数据表或者多个数据表。当处理某一数据表时,通过启动对应关系中该数据表对应的任务实例来处理该数据表中的数据。4.但是,当某一任务实例发生故障无法正常运行时,该任务实例所对应的数据表中的数据均无法得到有效地处理,需要等待该任务实例恢复正常后,才能继续处理该任务实例所对应的数据表中的数据,从而导致数据处理效率较低。技术实现要素:5.为了解决相关技术中存在的上述技术问题,本公开提供了一种数据处理方法、装置、电子设备及计算机可读存储介质,本公开的技术方案如下:6.根据本公开实施例的第一方面,提供了一种数据处理方法,包括:7.接收目标任务实例发送的抢锁请求;所述抢锁请求携带目标数据表对应的表标识;每一数据表对应一个锁;8.基于数据库中存储的数据表对应的锁的锁数据,确定所述目标数据表对应的目标锁的锁状态;所述目标锁的锁状态为所述目标锁当前被任务实例占用或者所述目标锁当前未被任务实例占用;9.在所述目标锁的锁状态为所述目标锁当前未被任务实例占用时,将所述目标锁分配给所述目标任务实例,以通过所述目标任务实例处理所述目标数据表中的数据,并在处理完所述目标数据表中的数据后,再次发送抢锁请求,再次发送的所述抢锁请求携带下一个目标数据表的表标识。10.可选的,所述基于数据库中存储的数据表对应的锁的锁数据,确定所述目标数据表对应的目标锁的锁状态,包括:11.在数据库中存储的数据表对应的锁的锁数据中,未存储所述目标数据表对应的目标锁的锁数据的情况下,确定所述目标锁的锁状态为当前未被任务实例占用。12.可选的,所述基于数据库中存储的数据表对应的锁的锁数据,确定所述目标数据表对应的目标锁的锁状态,包括:13.在数据库中存储的数据表对应的锁的锁数据中,存储所述目标数据表对应的目标锁的锁数据的情况下,在所述目标锁的锁数据中查找所述目标数据表的当前完成状态数据,所述当前完成状态数据包括已完成和未完成;14.在所述目标数据表的当前完成状态数据为未完成时,确定所述目标锁的锁状态为当前被任务实例占用。15.可选的,还包括:16.在确定所述目标锁的锁状态为当前被任务实例占用的情况下,在所述数据库中存储的所述目标锁的锁数据中,查询所述目标锁被任务实例占用的时刻;17.基于所述目标锁被任务实例占用的时刻与当前时刻,确定所述目标锁被任务实例占用的时长;18.在所述目标锁被任务实例占用的时长大于预设时长时,将所述目标锁分配给所述目标任务实例。19.可选的,还包括:20.基于所述数据库中存储的数据表对应的锁的锁数据中,确定各个数据表的当前处理状态;所述当前处理状态包括已处理、正在处理中和未处理;21.基于所述各个数据表的当前处理状态,生成所有数据表的当前处理状态图,并展示所述当前处理状态图。22.可选的,所述基于所述数据库中存储的数据表对应的锁的锁数据中,确定数据表的当前处理状态,包括:23.如果一个数据表对应的锁的锁数据未存储于所述数据库,确定该数据表的当前处理状态为未处理;24.如果一个数据表对应的锁的锁数据存储于所述数据库,且该数据表对应的锁的锁数据中当前完成状态数据为已完成,确定该数据表的当前处理状态为已处理;25.如果一个数据表对应的锁的锁数据存储于所述数据库,且该数据表对应的锁的锁数据中当前完成状态数据为未完成,确定该数据表的当前处理状态为正在处理中。26.根据本公开实施例的第二方面,提供了一种数据处理装置,包括:27.抢锁请求接收模块,被配置为执行接收目标任务实例发送的抢锁请求;所述抢锁请求携带目标数据表对应的表标识;每一数据表对应一个锁;28.锁状态确定模块,被配置为执行基于数据库中存储的数据表对应的锁的锁数据,确定所述目标数据表对应的目标锁的锁状态;所述目标锁的锁状态为所述目标锁当前被任务实例占用或者所述目标锁当前未被任务实例占用;29.数据处理模块,被配置为执行在所述目标锁的锁状态为所述目标锁当前未被任务实例占用时,将所述目标锁分配给所述目标任务实例,以通过所述目标任务实例处理所述目标数据表中的数据,并在处理完所述目标数据表中的数据后,再次发送抢锁请求,再次发送的所述抢锁请求携带下一个目标数据表的表标识。30.可选的,所述锁状态确定模块,具体被配置为执行:31.在数据库中存储的数据表对应的锁的锁数据中,未存储所述目标数据表对应的目标锁的锁数据的情况下,确定所述目标锁的锁状态为当前未被任务实例占用。32.可选的,所述锁状态确定模块,具体被配置为执行:33.在数据库中存储的数据表对应的锁的锁数据中,存储所述目标数据表对应的目标锁的锁数据的情况下,在所述目标锁的锁数据中查找所述目标数据表的当前完成状态数据,所述当前完成状态数据包括已完成和未完成;34.在所述目标数据表的当前完成状态数据为未完成时,确定所述目标锁的锁状态为当前被任务实例占用。35.可选的,还包括:36.时刻查询模块,被配置为执行在确定所述目标锁的锁状态为当前被任务实例占用的情况下,在所述数据库中存储的所述目标锁的锁数据中,查询所述目标锁被任务实例占用的时刻;37.时长确定模块,被配置为执行基于所述目标锁被任务实例占用的时刻与当前时刻,确定所述目标锁被任务实例占用的时长;38.数据处理模块,具体被配置为执行在所述目标锁被任务实例占用的时长大于预设时长时,将所述目标锁分配给所述目标任务实例。39.可选的,还包括:40.处理状态确定模块,被配置为执行基于所述数据库中存储的数据表对应的锁的锁数据中,确定各个数据表的当前处理状态;所述当前处理状态包括已处理、正在处理中和未处理;41.处理状态图确定模块,被配置为执行基于所述各个数据表的当前处理状态,生成所有数据表的当前处理状态图,并展示所述当前处理状态图。42.可选的,所述处理状态确定模块,具体被配置为执行:43.如果一个数据表对应的锁的锁数据未存储于所述数据库,确定该数据表的当前处理状态为未处理;44.如果一个数据表对应的锁的锁数据存储于所述数据库,且该数据表对应的锁的锁数据中当前完成状态数据为已完成,确定该数据表的当前处理状态为已处理;45.如果一个数据表对应的锁的锁数据存储于所述数据库,且该数据表对应的锁的锁数据中当前完成状态数据为未完成,确定该数据表的当前处理状态为正在处理中。46.根据本公开实施例的第三方面,提供了一种电子设备,包括:47.处理器;48.用于存储所述处理器可执行指令的存储器;49.其中,所述处理器被配置为执行所述指令,以实现如第一方面所述的方法。50.根据本公开实施例的第四方面,提供了一种计算机可读存储介质,当所述计算机可读存储介质中的指令由电子设备的处理器执行时,使得所述电子设备能够执行如第一方面所述的方法。51.根据本公开实施例的第五方面,提供了一种计算机程序产品,当其在计算机上运行时,使得计算机实现第一方面所述的方法。52.本技术实施例提供的技术方案,接收目标任务实例发送的抢锁请求;基于数据库中存储的数据表对应的锁的锁数据,确定目标数据表对应的目标锁的锁状态;在目标锁的锁状态为目标锁当前未被任务实例占用时,将目标锁分配给目标任务实例,以通过目标任务实例处理目标数据表中的数据,并在处理完目标数据表中的数据后,再次发送抢锁请求,再次发送的抢锁请求携带下一个目标数据表的表标识。53.可见,通过本公开实施例提供的技术方案,每个任务实例会主动向多任务实例扫表调度器获取其要处理的数据表的锁,并且,当其要获取的锁的锁状态为当前未被任务实例占用时,将其要获取的锁分配给该任务实例,该任务实例处理完该数据表中的数据后,再向多任务实例扫表调度器获取下一个数据表的锁,并在获取到下一个数据表的锁后,继续处理下一个数据表中的数据。而不是像相关技术那样,在任务启动时,一次性给任务实例分配好其要处理的数据表,从而可以实现性能好的任务实例能处理更多的数据表中的数据,提高了数据处理效率。附图说明54.图1是相关技术中任务实例处理数据表中的数据的示意图;55.图2是本公开实施例中任务实例处理数据表中的数据示意图;56.图3是根据一示例性实施例示出的一种数据处理方法的流程图;57.图4是根据一示例性实施例示出的另一种数据处理方法的流程图;58.图5是根据一示例性实施例示出的另一种数据处理方法的流程图;59.图6是根据一示例性实施例示出的另一种数据处理方法的流程图;60.图7是任务实例抢锁过程的一种实施方式的流程图;61.图8是任务实例释放锁过程的一种实施方式的流程图;62.图9是根据一示例性实施例示出的一种数据处理装置的框图;63.图10是根据一示例性实施例示出的另一种数据处理装置的框图。具体实施方式64.为了使本领域普通人员更好地理解本公开的技术方案,下面将结合附图,对本公开实施例中的技术方案进行清楚、完整地描述。65.需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。66.在业务开发过程中,经常会遇到在较短的时间内,需要处理大量数据的业务场景,为了满足业务需求,通常需要启动多个任务实例同时处理这些数据,以提高数据处理效果。其中,这多个任务实例可以运行在一台服务器中,也可以运行在多台服务器中。67.相关技术中,首先将大量待处理数据分到多个数据表中。例如,待处理数据有几千万条,可以将这几千万条数据分配到1000个数据表中,这1000个数据表可以被标记为table1、table2、table3……、table1000。68.然后建立多个任务实例与多个数据表之间的对应关系,其中,每个任务实例对应一个数据表或者多个数据表。当处理某一数据表时,通过启动对应关系中该数据表对应的任务实例来处理该数据表中的数据。69.例如,有3个任务实例,分别为task实例1、task实例2和task实例3,可以建立table1、table2、table3……、table1000这1000个数据表与3个任务实例的对应关系。如图1所示,为了描述方便,图1中只示出了table1与task实例1相对应,也就是说,task实例1用于处理table1中的数据;table2与task实例2相对应,也就是说,task实例2用于处理table2中的数据;table3与task实例3相对应,也就是说,task实例3用于处理table3中的数据;……,table1000与task实例1相对应,也就是说,task实例1用于处理table1000中的数据。70.由上述描述可知,相关技术中,任务启动时,每一数据表中的数据由哪个任务实例进行处理是预先确定的。但在实际应用中,如图1所示,任务处理过程中,某一任务实例可能发生故障无法正常运行,例如图1示出的task实例3出现故障,task实例3所对应的table3中的数据均无法得到有效地处理,需要等待task实例3恢复正常后,才能继续处理table3中的数据。71.可见,相关技术中,当某一任务实例发生故障无法正常运行时,该任务实例所对应的数据表中的数据均无法得到有效地处理,需要等待该任务实例恢复正常后,才能继续处理该任务实例所对应的数据表中的数据,从而导致数据处理效率较低。72.为了解决相关技术中存在的上述技术问题,本公开实施例提供了一种数据处理方法、装置、电子设备及计算机可读存储介质。73.为了方案描述清楚,首先从整体上对本技术实施例的技术方案进行详细阐述。74.本技术实施例的技术方案涉及到多个任务实例与多任务实例扫表调度器之间的交互。为了解决相关技术中存在的因任务实例出现故障而导致该任务实例对应的数据表中的数据无法得到有效地处理的技术问题,75.本技术实施例所采用的技术方案的整体思路为:每个任务实例自身主动向多任务实例扫表调度器获取每次要处理的数据表,而不是在任务启动时,一次性给任务实例分配好其要处理的数据表,这样能最大程度地磨平每个任务实例的性能差距,性能好的任务实例能处理更多的数据表中的数据。并且,当某一任务实例发生故障时,可以自动将已分配给此任务实例处理的数据表切换到其他正常实例处理。76.具体的,本技术实施例采用简单的分布式锁来实现上述目的。其中,每个数据表对应一个锁,每个任务实例遍历尝试获取指定数据表的锁,获取到锁的任务实例,就处理此数据表中的数据;其他实例继续尝试去获取其他数据表的锁,并在获取到某一数据表的锁时,处理此数据表中的数据。77.下面将结合图2对本技术实施例的技术方案进行详细阐述。78.如图2所示,按照时间线的先后顺序,以任务实例1和任务实例2为例进行说明。79.首先,任务实例1向多任务实例扫表调度器中获取表1的锁,并且,在获取到表1的锁即抢锁成功,任务实例1对表1的数据进行处理。80.任务实例2也向多任务实例扫表调度器中获取表1的锁,由于任务实例1已获取到表1的锁,因此,任务实例2抢锁失败。81.任务实例2继续向多任务实例扫表调度器中获取表2的锁,并且,在获取到表2的锁即抢锁成功,任务实例2对表2的数据进行处理。82.任务实例1处理完表1的数据后,向多任务实例扫表调度器发送处理完表1中的数据,以更新表1对应的处理状态。并且,任务实例1也向多任务实例扫表调度器中获取表2的锁,由于任务实例2已获取到表2的锁,因此,任务实例1抢锁失败。83.任务实例2处理完表2的数据后,向多任务实例扫表调度器发送处理完表2中的数据,以更新表2对应的处理状态。84.任务实例2继续向多任务实例扫表调度器中获取表3的锁,并且,在获取到表3的锁即抢锁成功时,任务实例2对表3的数据进行处理。85.但是,任务实例2在处理表3的数据的过程中,任务实例2出现崩溃或异常,即无法正常处理表3中的数据,此时,任务实例2释放表3的锁,任务实例1继续向所任务实例扫表调度器获取表3的锁,并且,在任务实例1获取到表3的锁即抢锁成功时,任务实例1对表3的数据进行处理。86.由上述描述可知,任务实例1和任务实例2均会按照数据表的表id,主动遍历尝试获取所有数据表的锁,当获取到某一数据表的锁时,则对该数据表中的数据进行处理。并且,在处理完该数据表的数据后,再去尝试获取下一个数据表的锁,从而实现了每个任务实例自身主动向多任务实例扫表调度器获取每次要处理的数据表,而不是在任务启动时,一次性给任务实例分配好其要处理的数据表,这样能最大程度地磨平每个任务实例的性能差距,性能好的任务实例能处理更多的数据表中的数据,提高了数据处理效率。87.并且,当某一任务实例发生故障时,该任务实例可以释放其未处理完的数据表的锁,其他正常的任务实例可以继续对未处理完的数据表中的数据进行处理,从而实现了可以自动将已分配给发生故障的任务实例处理的数据表切换到其他正常的任务实例处理,进一步提高了数据处理效率。88.在对本公开实施例的整体技术方案进行详细阐述后,下面将对本公开实施例提供的一种数据处理方法进行详细阐述。89.需要说明的是,本公开实施例所提供的数据处理方法的执行主体可以为上面所述的多任务实例扫表调度器。90.如图3所示,本公开实施例提供的一种数据处理方法,可以包括如下步骤:91.s310,接收目标任务实例发送的抢锁请求。92.其中,抢锁请求携带目标数据表对应的表标识;每一数据表对应一个锁。93.具体的,目标任务实例可以为启动的任一任务实例,例如,启动了3个任务实例,分别为任务实例1、任务实例2和任务实例3,那么,目标任务实例可以为任务实例1、任务实例2或者任务实例3。94.目标数据表可以为待处理的任一数据表,每一数据表对应一个锁。当目标任务实例想要处理某一数据表中的数据时,该数据表为目标数据表。此时,目标任务实例向多实例任务扫表调度器发送抢锁请求,该抢锁请求中携带目标数据表对应的表标识,即该抢锁请求用于获取目标数据表对应的目标锁。95.s320,基于数据库中存储的数据表对应的锁的锁数据,确定目标数据表对应的目标锁的锁状态。96.其中,一个锁的锁状态为该锁当前被任务实例占用或者该锁当前未被任务实例占用。97.多任务实例扫表调度器在接收到目标任务实例发送的抢锁请求后,对抢锁请求进行解析,得到抢锁请求所携带的目标数据表对应的表标识,多任务实例扫表调度器即可以判定目标任务实例想要获取目标数据表对应的目标锁。此时,多任务实例扫表调度器可以基于数据库中存储的数据表对应的锁的锁结构,来确定目标数据表对应的目标锁的锁状态。98.其中,数据库中存储的数据表对应的锁的锁数据的数据结构如表1所示。99.表1[0100][0101]其中,主键id为自动生成的锁id;stage_id为数据表中当前待处理的数据的id,例如,按照数据产生的日期,将一个数据表的数据分为多个部分,每一个部分的数据对应的id为一个stage_id;table_id为数据表的表id;is_done表示数据表中的数据是否处理完成,当is_done的值为0时,表示数据表中的数据未处理完成,当is_done的值为1时,表示数据表中的数据处理完成。times为一个数据表被重复处理的次数。例如,当一个数据表的处理结果有误时,需要对该数据表的数据进行再次处理;type为数据表的类型;create_time为创建时间,即为数据表的锁存储于数据库的时刻;update_time为更新时间,即为数据表的锁的状态更新的时刻,例如,如果数据表由未处理完变为处理完,那么,is_done的值由0变成1,即状态发生更新,这个时刻即为更新时刻。[0102]为了方案描述清楚,将在下面实施例中对s120,基于数据库中存储的数据表对应的锁的锁数据,确定目标数据表对应的目标锁的锁状态的具体实施方式进行详细阐述。[0103]s330,在目标锁的锁状态为目标锁当前未被任务实例占用时,将目标锁分配给目标任务实例,以通过目标任务实例处理目标数据表中的数据,并在处理完目标数据表中的数据后,再次发送抢锁请求,再次发送的抢锁请求用于获取下一个目标数据表对应的目标锁。[0104]具体的,如果目标数据表对应的目标锁的锁状态为目标锁当前未被任务实例占用时,说明目标数据表当前未被任何任务实例处理,此时,多任务实例扫表调度器将目标锁分配给目标任务实例,目标任务实例处理目标数据表中的数据。如果目标数据表对应的目标锁的锁状态为目标锁当前被任务实例占用时,目标任务实例可以再次向多任务实例扫表调度器再次发送抢锁请求,以尝试处理下一个目标数据表中的数据。[0105]并且,目标任务实例在处理完目标数据表后,也可以向多任务实例扫表调度器再次发送抢锁请求,以尝试处理下一个目标数据表中的数据。可见,处理数据性能好的任务实例可以处理更多的数据表中的数据,提高了数据处理效率。[0106]本技术实施例提供的技术方案,接收目标任务实例发送的抢锁请求;基于数据库中存储的数据表对应的锁的锁数据,确定目标数据表对应的目标锁的锁状态;在目标锁的锁状态为目标锁当前未被任务实例占用时,将目标锁分配给目标任务实例,以通过目标任务实例处理目标数据表中的数据,并在处理完目标数据表中的数据后,再次发送抢锁请求,再次发送的抢锁请求携带下一个目标数据表的表标识。[0107]可见,通过本公开实施例提供的技术方案,每个任务实例会主动向多任务实例扫表调度器获取其要处理的数据表的锁,并且,当其要获取的锁的锁状态为当前未被任务实例占用时,将其要获取的锁分配给该任务实例,该任务实例处理完该数据表中的数据后,再向多任务实例扫表调度器获取下一个数据表的锁,并在获取到下一个数据表的锁后,继续处理下一个数据表中的数据。而不是像相关技术那样,在任务启动时,一次性给任务实例分配好其要处理的数据表,从而可以实现性能好的任务实例能处理更多的数据表中的数据,提高了数据处理效率。[0108]为了方案描述清楚,将在下面实施例中,对s320,基于数据库中存储的数据表对应的锁的锁数据,确定目标数据表对应的目标锁的锁状态的具体实施方式进行详细阐述。[0109]在一种实施方式中,s320,基于数据库中存储的数据表对应的锁的锁数据,确定目标数据表对应的目标锁的锁状态,如图4所示,可以包括如下步骤:[0110]s321,在数据库中存储的数据表对应的锁的锁数据中,未存储目标数据表对应的目标锁的锁数据的情况下,确定目标锁的锁状态为当前未被任务实例占用。[0111]具体的,在实际应用中,如果一个数据表对应的锁被某一任务实例占用,那么,为了监控该数据表对应的锁的锁状态,可以将该数据表对应的锁的锁数据存储到数据库中。由于mysql数据库更稳定,更持久化,且mysql数据库中的数据是存储在本地磁盘中,不会造成数据丢失,因此,可以将数据表对应的锁的锁数据存储于mysql数据库中。[0112]在确定目标数据表对应的目标锁的锁状态时,可以判断数据库中存储的数据表对应的锁的锁数据中,是否存储有目标数据表对应的目标锁的锁数据,如果在数据库中存储的数据表对应的锁的锁数据中,未存储目标数据表对应的目标锁的锁数据,说明目标数据表对应的目标锁当前未被任何任务实例占用,也就是说,目标数据表中的数据当前未被任何任务实例进行处理。因此,可以确定目标锁的锁状态为当前未被任务实例占用,此时,可以将目标数据表的目标锁分配给目标任务实例,从而目标任务实例抢锁成功,并可以对目标数据表中的数据进行处理。[0113]可见,通过本实施方式提供的技术方案,判断在数据库中存储的数据表对应的锁的锁数据中是否存储目标数据表对应的目标锁的锁数据,并在数据库中存储的数据表对应的锁的锁数据中,未存储目标数据表对应的目标锁的锁数据时,确定目标数据库对应的目标锁的锁状态为当前未被任务实例占用,从而可以准确地判断目标数据表对应的目标锁的锁状态,进而通过将目标锁分配给目标任务实例,目标任务实例对目标数据表中的数据进行处理,有助于提高数据处理效率。[0114]在另一种实施方式中,s320,基于数据库中存储的数据表对应的锁的锁数据,确定目标数据表对应的目标锁的锁状态,如图5所示,可以包括如下步骤:[0115]s322,在数据库中存储的数据表对应的锁的锁数据中,存储目标数据表对应的目标锁的锁数据的情况下,在目标锁的锁数据中查找目标数据表的当前完成状态数据。[0116]其中,当前完成状态数据包括已完成和未完成。[0117]具具体的,在实际应用中,如果一个数据表对应的锁被某一任务实例占用,那么,为了监控该数据表对应的锁的锁状态,可以将该数据表对应的锁的锁数据存储到数据库中。由于mysql数据库更稳定,更持久化,且mysql数据库中的数据是存储在本地磁盘中,不会造成数据丢失,因此,可以将数据表对应的锁的锁数据存储于mysql数据库中。[0118]在确定目标数据表对应的目标锁的锁状态时,可以判断数据库中存储的数据表对应的锁的锁数据中,是否存储有目标数据表对应的目标锁的锁数据,如果在数据库中存储的数据表对应的锁的锁数据中,存储有目标数据表对应的目标锁的锁数据,说明目标数据表对应的目标锁当前被某一任务实例占用,也就是说,目标数据表中的数据被某一任务实例进行处理。[0119]由于任务实例可能已经将目标数据表中的数据处理完,或者,当前正在对目标数据表中的数据进行处理,但还没有处理完。因此,在目标锁的锁数据中查找目标数据表的当前完成状态数据。当前完成状态数据的字段可以为is_done,如果is_done对应的值为0,说明某一任务实例当前正在处理中目标数据表中的数据,即目标数据表的目标锁当前正在被该任务实例处理;如果is_done对应的值为1,说明某一任务实例已经处理完目标数据表中的数据,不需要再对目标数据表中的数据进行处理。[0120]s323,在目标数据表的当前完成状态数据为未完成时,确定目标锁的锁状态为当前被任务实例占用。[0121]具体的,在目标数据表的当前完成状态数据为未完成时,说明某一任务实例当前正在处理中目标数据表中的数据,即目标数据表的目标锁当前正在被该任务实例处理,因此,确定目标锁的锁状态为当前被任务实例占用。[0122]可见,通过本实施方式提供的技术方案,判断在数据库中存储的数据表对应的锁的锁数据中是否存储目标数据表对应的目标锁的锁数据,并在数据库中存储的数据表对应的锁的锁数据中,存储有目标数据表对应的目标锁的锁数据时,进一步在目标锁的锁数据中查找目标数据表的当前完成状态数据,并在目标数据表的当前完成状态数据为未完成时,确定目标锁的锁状态为当前被任务实例占用,即说明某一任务实例当前正在处理中目标数据表中的数据,此时,不将目标锁分配给目标任务实例,这样目标任务实例可以尝试处理下一个数据表,从而实现为每一数据表分配一个任务实例,避免多个任务实例重复处理同一数据表中的数据,进一步提高了数据处理效率。[0123]在图5所示实施例的基础上,在一种实施方式中,如图6所示,该数据处理方法还可以包括如下步骤:[0124]s340,在确定目标锁的锁状态为当前被任务实例占用的情况下,在数据库中存储的目标锁的锁数据中,查询目标锁被任务实例占用的时刻。[0125]具体的,在实际应用中,可能会存在占用目标锁的任务实例出现故障或者崩溃的情况,为了避免因占用目标锁的任务实例出现故障或者崩溃而导致目标数据表中的数据无法得到有效处理,在确定目标锁的锁状态为当前被任务实例占用后,在数据库中存储的目标锁的锁数据中,查找目标锁被任务实例占用的时刻,该时刻可以为目标锁的锁数据中的最后的更新更新时刻。[0126]s350,基于目标锁被任务实例占用的时刻与当前时刻,确定目标锁被任务实例占用的时长。[0127]具体的,在得到目标锁被任务实例占用的时刻后,可以计算目标锁被任务实例占用的时刻到当前时刻之间的距离,即计算目标锁被任务实例占用的时长。[0128]可以理解的是,如果目标锁被某一任务实例占用的时长较长,说明该任务实例长时间没用处理完目标数据表中的数据,此时,可以判定该任务实例出现故障或者崩溃。如果目标锁被某一任务实例占用的时长不太长,说明该任务实例正在处理中完目标数据表中的数据。[0129]s360,在目标锁被任务实例占用的时长大于预设时长时,将目标锁分配给目标任务实例。[0130]具体的,如果目标锁被某一任务实例占用的时长较长,说明该任务实例长时间没用处理完目标数据表中的数据,此时,可以判定该任务实例出现故障或者崩溃。为了保证目标数据表中的数据能够得到有效处理,可以将目标锁转移到正常运行的目标任务实例,即将目标锁分配给目标任务实例,目标任务实例获取到目标锁后,对目标数据表中的数据进行处理,从而可以避免因某一任务实例出现故障或者崩溃,而导致目标数据表中的数据无法正常处理的情况发生,进一步提高了数据处理效率。[0131]本实施方式提供的技术方案,在目标锁被某一任务实例占用的时长大于预设时长较长时,自动将目标锁分配给其他任务实例进行处理,从而实现了正常运行的任务实例自动接管故障任务实例正在处理中的数据表,从而可以避免因某一任务实例出现故障或者崩溃,而导致该任务实例正在处理中的数据表中的数据无法正常处理的情况发生,进一步提高了数据处理效率。[0132]在图6所示实施例的基础上,在一种实施方式中,s360,在目标锁被任务实例占用的时长大于预设时长时,将目标锁分配给目标任务实例,可以包括如下步骤:[0133]步骤a1,在目标锁被任务实例占用的时长大于预设时长时,接收占用目标锁的任务实例发送的释放锁请求。[0134]具体的,在目标锁被任务实例占用的时长大于预设时长时,说明占用目标锁的任务实例出现故障或者崩溃,此时,占用目标锁的任务实例向多任务实例扫表调度器发送释放锁请求,从而多任务实例扫表调度器接收到占用目标锁的任务实例发送的释放锁请求。[0135]步骤a2,删除目标锁,并为目标数据表增加更新后的目标锁。[0136]具体的,多任务实例扫表调度器在接收到占用目标锁的任务实例发送的释放锁请求时,删除目标锁,即实现了释放目标锁。并且,为目标数据表增加一个更新后的目标锁,并将目标锁的锁数据写入数据库中。[0137]步骤a3,将更新后的目标锁分配给目标任务实例。[0138]具体的,由于更新后的目标锁未被任何任务实例占用,且目标任务实例是当前正常运行的任务实例,因此,可以将更新后的目标锁分配给目标任务实例,目标任务实例可以及时处理目标数据表中的数据,从而提高了数据处理效率。[0139]可见,本实施方式提供的技术方案,在占用目标锁的任务实例出现故障或者崩溃时,可以及时释放目标锁,并将目标锁分配给可以正常处理数据的目标任务实例,从而目标任务实例可以及时地处理目标数据表中的数据,提高了数据处理效率。[0140]在上述实施例的基础上,在一种实施方式中,该数据处理方法还可以包括如下步骤:[0141]步骤b1,基于数据库中存储的数据表对应的锁的锁数据中,确定各个数据表的当前处理状态。[0142]其中,当前处理状态包括已处理、正在处理中和未处理。[0143]为了能够实时获取到数据表中数据处理进度,可以基于数据库中存储的数据表对应的锁的锁数据中,确定各个数据表的当前处理状态。一个数据表的当前处理状态可以为已处理、正在处理中和未处理。[0144]在一种实施方式中,基于数据库中存储的数据表对应的锁的锁数据中,确定数据表的当前处理状态,可以包括如下步骤:[0145]如果一个数据表对应的锁的锁数据未存储于所述数据库,确定该数据表的当前处理状态为未处理。[0146]如果一个数据表对应的锁的锁数据存储于所述数据库,且该数据表对应的锁的锁数据中当前完成状态数据为已完成,确定该数据表的当前处理状态为已处理;[0147]如果一个数据表对应的锁的锁数据存储于所述数据库,且该数据表对应的锁的锁数据中当前完成状态数据为未完成,确定该数据表的当前处理状态为正在处理中。[0148]具体的,如果一个数据表对应的锁的锁数据未存储于数据库中,说明该数据表对应的锁未被任何任务实例占用,因此,确定该当前处理状态为未处理。[0149]如果一个数据表对应的锁的锁数据存储于数据库,且该数据表对应的锁的锁数据中当前完成状态数据为已完成。例如,锁数据中字段为is_done的值为1,此时,当前完成状态数据为已完成,此时,确定该数据表的当前处理状态为已处理。[0150]如果一个数据表对应的锁的锁数据存储于数据库,且该数据表对应的锁的锁数据中当前完成状态数据为未完成。例如,锁数据中字段为is_done的值为0,此时,当前完成状态数据为未完成,此时,确定该数据表的当前处理状态为正在处理中。[0151]可见,通过查询数据库中各个数据表的锁数据,当数据库中未存储某一数据表对应的锁的锁数据时,确定该数据表的当前处理状态为未处理。当数据库中存储有某一数据表对应的锁的锁数据时,在基于该数据表对应的锁的锁数据中当前完成状态数据,来准确地确定该数据表的当前处理状态为已处理还是正在处理中,从而实现了准确地确定各个数据表的当前处理状态,有助于后续生成所有数据表的当前处理状态图,进而可以直观地获取到所有数据表的处理进度,从而实现实时监控所有数据表的处理进度。[0152]步骤b2,基于各个数据表的当前处理状态,生成所有数据表的当前处理状态图,并展示当前处理状态图。[0153]具体的,在确定了各个数据表的当前处理状态后,生成所述数据表的当前处理状态图,并展示当前处理状态图,这样,可以直观地获取到所有数据表的处理进度。[0154]例如,当前处理状态图中展示有1个数据表已处理,2个数据表正在处理中,3个数据表未处理,这样能够实时监控所有数据表的处理进度。[0155]可见,通过数据库中存储的数据表对应的锁的锁数据中,可以准确地确定各个数据表的当前处理状态,并基于各个数据表的当前处理状态,生成所有数据表的当前处理状态图,并展示当前处理状态图,这样,可以直观地获取到所有数据表的处理进度,进而能够实时监控所有数据表的处理进度。[0156]为了方案描述清楚,下面将结合具体实例对任务实例的抢锁过程进行详细阐述。[0157]如图7所示,抢锁过程可以包括如下步骤:[0158]s710,接收针对某个数据表的抢锁请求。[0159]s720,判断抢锁是否成功,若为是,说明该数据表对应的锁当前未被任务实例占用,因此,确定抢锁成功,若为否,执行s730。[0160]s730,查询该数据表被抢锁记录。[0161]s740,判断该数据表被抢锁记录是否为空,若为是,说明因网络抖动等原因导致抢锁失败,因此,确定抢锁失败;若为否,执行s750。[0162]s750,判断该数据表对应的锁的锁数据中当前完成状态数据是否为已完成,若为是,说明该数据表中的数据已经被处理完,因此,确定抢锁失败;若为否,执行步骤s760。[0163]s760,判断该数据表对应的锁的锁数据中最后的更新时刻距离当前时刻的时长是否大于指定的阈值,若为否,说明该数据表中的数据当前正在被其他实例处理,因此,确定抢锁失败;若为是,执行s770;[0164]s770,是否删除老锁;若为否,确定抢锁失败。若为是,执行s780。[0165]其中,老锁为该数据表对应的锁。如果没有删除老锁,则当前抢锁的任务实例无法成功抢锁,因此,确定抢锁失败。[0166]s780,判断再次抢锁是否成功,若为否,说明该数据表对应的锁已经被其他任务实例重新抢到了锁,因此,确定抢锁失败;若为是,确定抢锁成功。[0167]为了方案描述清楚,下面将结合具体实例对任务实例的释放锁过程进行详细阐述。[0168]如图8所示,释放锁过程可以包括如下步骤:[0169]s810,接收针对某个数据表的释放锁请求。[0170]s820,查询该数据表被抢锁记录。[0171]s830,判断该数据表被抢锁记录是否为空,若为是,说明由于数据库异常或者网络抖动等原因导致释放锁失败,因此,确定释放锁失败;若为否,执行s840。[0172]s840,判断请求释放锁的任务实例所占用的锁的版本号与数据库中记录的该数据表的锁的版本号是否一致;若为否,说明该数据表的锁已经被其他任务实例竞争获取了,因此,确定释放锁失败;若为是,执行s850。[0173]s850,判断该数据表对应的锁的锁数据中当前完成状态数据是否为已完成;若为是,说明该数据表中的数据已经被处理完,因此,确定释放锁失败;否则,执行s860;[0174]s860,判断删除老锁是否成功,若为否,确定释放锁失败;若为是,确定释放锁成功。[0175]其中,老锁为该数据表对应的锁。如果没有删除老锁,则判定释放锁失败;如果成功删除老锁,则判定释放锁成功。[0176]根据本公开实施例的第二方面,提供了一种数据处理装置,如图9所示,包括:[0177]抢锁请求接收模块910,被配置为执行接收目标任务实例发送的抢锁请求;所述抢锁请求携带目标数据表对应的表标识;每一数据表对应一个锁;[0178]锁状态确定模块920,被配置为执行基于数据库中存储的数据表对应的锁的锁数据,确定所述目标数据表对应的目标锁的锁状态;所述目标锁的锁状态为所述目标锁当前被任务实例占用或者所述目标锁当前未被任务实例占用;[0179]数据处理模块930,被配置为执行在所述目标锁的锁状态为所述目标锁当前未被任务实例占用时,将所述目标锁分配给所述目标任务实例,以通过所述目标任务实例处理所述目标数据表中的数据,并在处理完所述目标数据表中的数据后,再次发送抢锁请求,再次发送的所述抢锁请求携带下一个目标数据表的表标识。[0180]本技术实施例提供的技术方案,接收目标任务实例发送的抢锁请求;基于数据库中存储的数据表对应的锁的锁数据,确定目标数据表对应的目标锁的锁状态;在目标锁的锁状态为目标锁当前未被任务实例占用时,将目标锁分配给目标任务实例,以通过目标任务实例处理目标数据表中的数据,并在处理完目标数据表中的数据后,再次发送抢锁请求,再次发送的抢锁请求携带下一个目标数据表的表标识。[0181]可见,通过本公开实施例提供的技术方案,每个任务实例会主动向多任务实例扫表调度器获取其要处理的数据表的锁,并且,当其要获取的锁的锁状态为当前未被任务实例占用时,将其要获取的锁分配给该任务实例,该任务实例处理完该数据表中的数据后,再向多任务实例扫表调度器获取下一个数据表的锁,并在获取到下一个数据表的锁后,继续处理下一个数据表中的数据。而不是像相关技术那样,在任务启动时,一次性给任务实例分配好其要处理的数据表,从而可以实现性能好的任务实例能处理更多的数据表中的数据,提高了数据处理效率。[0182]可选的,所述锁状态确定模块,具体被配置为执行:[0183]在数据库中存储的数据表对应的锁的锁数据中,未存储所述目标数据表对应的目标锁的锁数据的情况下,确定所述目标锁的锁状态为当前未被任务实例占用。[0184]可选的,所述锁状态确定模块,具体被配置为执行:[0185]在数据库中存储的数据表对应的锁的锁数据中,存储所述目标数据表对应的目标锁的锁数据的情况下,在所述目标锁的锁数据中查找所述目标数据表的当前完成状态数据,所述当前完成状态数据包括已完成和未完成;[0186]在所述目标数据表的当前完成状态数据为未完成时,确定所述目标锁的锁状态为当前被任务实例占用。[0187]可选的,还包括:[0188]时刻查询模块,被配置为执行在确定所述目标锁的锁状态为当前被任务实例占用的情况下,在所述数据库中存储的所述目标锁的锁数据中,查询所述目标锁被任务实例占用的时刻;[0189]时长确定模块,被配置为执行基于所述目标锁被任务实例占用的时刻与当前时刻,确定所述目标锁被任务实例占用的时长;[0190]数据处理模块,具体被配置为执行在所述目标锁被任务实例占用的时长大于预设时长时,将所述目标锁分配给所述目标任务实例。[0191]可选的,还包括:[0192]处理状态确定模块,被配置为执行基于所述数据库中存储的数据表对应的锁的锁数据中,确定各个数据表的当前处理状态;所述当前处理状态包括已处理、正在处理中和未处理;[0193]处理状态图确定模块,被配置为执行基于所述各个数据表的当前处理状态,生成所有数据表的当前处理状态图,并展示所述当前处理状态图。[0194]可选的,所述处理状态确定模块,具体被配置为执行:[0195]如果一个数据表对应的锁的锁数据未存储于所述数据库,确定该数据表的当前处理状态为未处理;[0196]如果一个数据表对应的锁的锁数据存储于所述数据库,且该数据表对应的锁的锁数据中当前完成状态数据为已完成,确定该数据表的当前处理状态为已处理;[0197]如果一个数据表对应的锁的锁数据存储于所述数据库,且该数据表对应的锁的锁数据中当前完成状态数据为未完成,确定该数据表的当前处理状态为正在处理中。[0198]图10是根据一示例性实施例示出的一种装置1000的框图。例如,装置1000可以被提供为一服务器。参照图10,装置1000包括处理组件1022,其进一步包括一个或多个处理器,以及由存储器1032所代表的存储器资源,用于存储可由处理组件1022的执行的指令,例如应用程序。存储器1032中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件1022被配置为执行指令,以执行第一方面所述的方法。[0199]装置1000还可以包括一个电源组件1026被配置为执行装置1000的电源管理,一个有线或无线网络接口1050被配置为将装置1000连接到网络,和一个输入输出(i/o)接口1058。装置1000可以操作基于存储在存储器1032的操作系统,例如windowsservertm,macosxtm,unixtm,linuxtm,freebsdtm或类似。[0200]本技术实施例提供的技术方案,接收目标任务实例发送的抢锁请求;基于数据库中存储的数据表对应的锁的锁数据,确定目标数据表对应的目标锁的锁状态;在目标锁的锁状态为目标锁当前未被任务实例占用时,将目标锁分配给目标任务实例,以通过目标任务实例处理目标数据表中的数据,并在处理完目标数据表中的数据后,再次发送抢锁请求,再次发送的抢锁请求携带下一个目标数据表的表标识。[0201]可见,通过本公开实施例提供的技术方案,每个任务实例会主动向多任务实例扫表调度器获取其要处理的数据表的锁,并且,当其要获取的锁的锁状态为当前未被任务实例占用时,将其要获取的锁分配给该任务实例,该任务实例处理完该数据表中的数据后,再向多任务实例扫表调度器获取下一个数据表的锁,并在获取到下一个数据表的锁后,继续处理下一个数据表中的数据。而不是像相关技术那样,在任务启动时,一次性给任务实例分配好其要处理的数据表,从而可以实现性能好的任务实例能处理更多的数据表中的数据,提高了数据处理效率。[0202]根据本公开实施例的第三方面,提供了一种电子设备,包括:[0203]处理器;[0204]用于存储所述处理器可执行指令的存储器;[0205]其中,所述处理器被配置为执行所述指令,以实现如第一方面所述的方法。[0206]本技术实施例提供的技术方案,接收目标任务实例发送的抢锁请求;基于数据库中存储的数据表对应的锁的锁数据,确定目标数据表对应的目标锁的锁状态;在目标锁的锁状态为目标锁当前未被任务实例占用时,将目标锁分配给目标任务实例,以通过目标任务实例处理目标数据表中的数据,并在处理完目标数据表中的数据后,再次发送抢锁请求,再次发送的抢锁请求携带下一个目标数据表的表标识。[0207]可见,通过本公开实施例提供的技术方案,每个任务实例会主动向多任务实例扫表调度器获取其要处理的数据表的锁,并且,当其要获取的锁的锁状态为当前未被任务实例占用时,将其要获取的锁分配给该任务实例,该任务实例处理完该数据表中的数据后,再向多任务实例扫表调度器获取下一个数据表的锁,并在获取到下一个数据表的锁后,继续处理下一个数据表中的数据。而不是像相关技术那样,在任务启动时,一次性给任务实例分配好其要处理的数据表,从而可以实现性能好的任务实例能处理更多的数据表中的数据,提高了数据处理效率。[0208]根据本公开实施例的第四方面,提供了一种计算机可读存储介质,当所述计算机可读存储介质中的指令由电子设备的处理器执行时,使得所述电子设备能够执行如第一方面所述的方法。[0209]本技术实施例提供的技术方案,接收目标任务实例发送的抢锁请求;基于数据库中存储的数据表对应的锁的锁数据,确定目标数据表对应的目标锁的锁状态;在目标锁的锁状态为目标锁当前未被任务实例占用时,将目标锁分配给目标任务实例,以通过目标任务实例处理目标数据表中的数据,并在处理完目标数据表中的数据后,再次发送抢锁请求,再次发送的抢锁请求携带下一个目标数据表的表标识。[0210]可见,通过本公开实施例提供的技术方案,每个任务实例会主动向多任务实例扫表调度器获取其要处理的数据表的锁,并且,当其要获取的锁的锁状态为当前未被任务实例占用时,将其要获取的锁分配给该任务实例,该任务实例处理完该数据表中的数据后,再向多任务实例扫表调度器获取下一个数据表的锁,并在获取到下一个数据表的锁后,继续处理下一个数据表中的数据。而不是像相关技术那样,在任务启动时,一次性给任务实例分配好其要处理的数据表,从而可以实现性能好的任务实例能处理更多的数据表中的数据,提高了数据处理效率。[0211]根据本公开实施例的第五方面,提供了一种计算机程序产品,当其在计算机上运行时,使得计算机实现第一方面所述的方法。[0212]本技术实施例提供的技术方案,接收目标任务实例发送的抢锁请求;基于数据库中存储的数据表对应的锁的锁数据,确定目标数据表对应的目标锁的锁状态;在目标锁的锁状态为目标锁当前未被任务实例占用时,将目标锁分配给目标任务实例,以通过目标任务实例处理目标数据表中的数据,并在处理完目标数据表中的数据后,再次发送抢锁请求,再次发送的抢锁请求携带下一个目标数据表的表标识。[0213]可见,通过本公开实施例提供的技术方案,每个任务实例会主动向多任务实例扫表调度器获取其要处理的数据表的锁,并且,当其要获取的锁的锁状态为当前未被任务实例占用时,将其要获取的锁分配给该任务实例,该任务实例处理完该数据表中的数据后,再向多任务实例扫表调度器获取下一个数据表的锁,并在获取到下一个数据表的锁后,继续处理下一个数据表中的数据。而不是像相关技术那样,在任务启动时,一次性给任务实例分配好其要处理的数据表,从而可以实现性能好的任务实例能处理更多的数据表中的数据,提高了数据处理效率。[0214]本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本技术旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本
技术领域
:中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。[0215]应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1