CN111400330A - 任务处理方法、装置、设备及计算机可读存储介质 - Google Patents
任务处理方法、装置、设备及计算机可读存储介质 Download PDFInfo
- Publication number
- CN111400330A CN111400330A CN202010180590.6A CN202010180590A CN111400330A CN 111400330 A CN111400330 A CN 111400330A CN 202010180590 A CN202010180590 A CN 202010180590A CN 111400330 A CN111400330 A CN 111400330A
- Authority
- CN
- China
- Prior art keywords
- transaction
- task processing
- lock
- thread
- polling
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 41
- 238000012545 processing Methods 0.000 claims abstract description 109
- 230000007717 exclusion Effects 0.000 claims abstract description 62
- 230000001360 synchronised effect Effects 0.000 claims description 35
- 238000005516 engineering process Methods 0.000 abstract description 6
- 238000000034 method Methods 0.000 description 28
- 230000008569 process Effects 0.000 description 15
- 238000004891 communication Methods 0.000 description 6
- 230000007246 mechanism Effects 0.000 description 6
- 230000000903 blocking effect Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 238000012423 maintenance Methods 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2336—Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
- G06F16/2343—Locking methods, e.g. distributed locking or locking implementation details
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种任务处理方法、装置、设备及计算机可读存储介质,涉及金融科技技术领域。该任务处理方法包括:每隔第一预设时间通过轮询线程开启第一事务;向目标数据库发送查询命令,得到第一返回结果,并根据所述第一返回结果判断是否存在指定类型且处于空闲状态的互斥锁;若存在指定类型且处于空闲状态的互斥锁,则向所述目标数据库发送第一更新命令,得到第二返回结果,并根据所述第二返回结果判断所述互斥锁是否已被锁定;若判定所述互斥锁未被锁定,则向所述目标数据库提交所述第一事务,以竞争获取互斥锁,并进行任务处理。本发明能够在不引入额外基础软件设施的基础上、基于TiDB乐观锁实现任务的竞争与互斥,可节省成本。
Description
技术领域
本发明涉及金融科技(Fintech)技术领域,尤其涉及一种任务处理方法、装置、设备及计算机可读存储介质。
背景技术
随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技(Fintech)转变,但由于金融行业的安全性、实时性要求,也对技术提出了更高的要求。
目前,互联网银行的任务处理系统,通常面临着大量的任务、海量的数据需要处理。而传统关系型数据库,由于其横向扩展性差,已逐渐无法满足任务处理系统对于海量数据处理的需求。而TiDB作为一款结合了传统关系型数据库和非关系型数据库特性的新型分布式数据库,可支持无限的横向扩展,同时也兼容MySQL协议和语法,因此,将大量任务和海量数据用TiDB来处理,完全可以解决数据库的瓶颈问题。
然而,由于TiDB的锁类型为乐观锁,而传统关系型数据库的锁类型为悲观锁,因此,在任务处理过程中,传统关系型数据库的任务竞争与互斥方法并不适用于TiDB数据库。目前,为实现基于TiDB数据库的任务竞争与互斥,通常会将互斥锁迁移到分布式缓存中来实现,比如Redis(Remote Dictionary Server,远程字典服务,一款分布式内存数据库),但是该种做法存在以下缺点:1)引入了额外的部署单元,会提高编码成本、部署成本及运维成本;2)当Redis服务宕机时,或者当Redis的网络线路不通时,任务将无法处理。因此,如何在不引入额外基础软件设施的基础上、基于TiDB乐观锁实现任务的竞争与互斥是目前亟需解决的问题。
发明内容
本发明的主要目的在于提供一种任务处理方法、装置、设备及计算机可读存储介质,旨在实现在不引入额外基础软件设施的基础上、基于TiDB乐观锁实现任务的竞争与互斥,以节省成本。
为实现上述目的,本发明提供一种任务处理方法,所述任务处理方法包括:
每隔第一预设时间通过轮询线程开启第一事务;
向目标数据库发送查询命令,得到第一返回结果,并根据所述第一返回结果判断是否存在指定类型且处于空闲状态的互斥锁;
若存在指定类型且处于空闲状态的互斥锁,则向所述目标数据库发送第一更新命令,得到第二返回结果,并根据所述第二返回结果判断所述互斥锁是否已被锁定;
若判定所述互斥锁未被锁定,则向所述目标数据库提交所述第一事务,以竞争获取互斥锁,并进行任务处理。
可选地,所述每隔第一预设时间通过轮询线程开启第一事务的步骤包括:
每隔第一预设时间获取轮询线程的上下文信息,并根据所述上下文信息判断所述轮询线程中是否存在处理事务;
若所述轮询线程中存在处理事务,则通过所述轮询线程创建第一同步等待线程,并在所述第一同步等待线程中开启第一事务;
若所述轮询线程中不存在处理事务,则在所述轮询线程中开启第一事务。
可选地,所述任务处理方法还包括:
当侦测到所述第一事务提交成功、获取到互斥锁时,在所述轮询线程中开启第二事务;
通过所述轮询线程查询任务列表,得到待执行任务;
对所述待执行任务进行标记,并将标记后的待执行任务提交到线程池进行处理;
当侦测到任务处理完成时,向所述目标数据库提交所述第二事务。
可选地,所述当侦测到任务处理完成时,向所述目标数据库提交所述第二事务的步骤之后,还包括:
通过所述轮询线程开启第三事务;
向所述目标数据库发送第二更新命令,以释放所述互斥锁,并向所述目标数据库提交所述第三事务。
可选地,所述通过所述轮询线程开启第三事务的步骤包括:
获取所述轮询线程的上下文信息,并根据所述上下文信息判断所述轮询线程中是否存在处理事务;
若所述轮询线程中存在处理事务,则通过所述轮询线程创建第二同步等待线程,并在所述第二同步等待线程中开启第三事务;
若所述轮询线程中不存在处理事务,则在所述轮询线程中开启第三事务。
可选地,所述任务处理方法还包括:
当根据所述第一返回结果判定不存在指定类型且处于空闲状态的互斥锁时,或当根据所述第二返回结果判定所述互斥锁已被锁定时,或当侦测到所述第一事务提交失败时,记录互斥锁获取失败的信息,并在经过第二预设时间时返回执行步骤:向目标数据库发送查询命令,得到第一返回结果,并根据所述第一返回结果判断是否存在指定类型且处于空闲状态的互斥锁。
可选地,所述失败的信息中包括第一返回结果信息,所述任务处理方法还包括:
判断所述失败的信息的数量是否超过预设阈值;
若超过预设阈值,则根据所述第一返回结果信息判断各第一返回结果是否均为空;
若各第一返回结果均为空,则向所述目标数据库发送第三更新命令,以强制释放所述互斥锁。
此外,为实现上述目的,本发明还提供一种任务处理装置,所述任务处理装置包括:
第一开启模块,用于每隔第一预设时间通过轮询线程开启第一事务;
第一判断模块,用于向目标数据库发送查询命令,得到第一返回结果,并根据所述第一返回结果判断是否存在指定类型且处于空闲状态的互斥锁;
第二判断模块,用于若存在指定类型且处于空闲状态的互斥锁,则向所述目标数据库发送第一更新命令,得到第二返回结果,并根据所述第二返回结果判断所述互斥锁是否已被锁定;
互斥锁竞争模块,用于若判定所述互斥锁未被锁定,则向所述目标数据库提交所述第一事务,以竞争获取互斥锁,并进行任务处理。
此外,为实现上述目的,本发明还提供一种任务处理设备,所述任务处理设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的任务处理程序,所述任务处理程序被所述处理器执行时实现如上所述的任务处理方法的步骤。
此外,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有任务处理程序,所述任务处理程序被处理器执行时实现如上所述的任务处理方法的步骤。
本发明提供一种任务处理方法、装置、设备及计算机可读存储介质,每隔第一预设时间通过轮询线程开启第一事务;向目标数据库(即TiDB数据库)发送查询命令,得到第一返回结果,并根据第一返回结果判断是否存在指定类型且处于空闲状态的互斥锁;若存在指定类型且处于空闲状态的互斥锁,则向目标数据库发送第一更新命令,得到第二返回结果,并根据第二返回结果判断互斥锁是否已被锁定;若判定互斥锁未被锁定,则向目标数据库提交第一事务,以竞争获取互斥锁,并进行任务处理。通过上述方式,在TiDB乐观锁的基础上,增加检测判断的过程,只在符合条件时方可竞争获取互斥锁,实际上相当增加了一种“阻塞”机制,从而使得最终只有某一应用实例中的某一线程竞争得到互斥锁,本发明无需引入额外基础软件设施,在TiDB乐观锁的基础上实现任务的竞争与互斥,相比于现有技术中将互斥锁迁移到分布式缓存中以实现任务的竞争与互斥,本发明可节省编码成本、部署成本及运维成本,同时,基于本发明的任务竞争与互斥机制,可使得各种任务处理程序运行于TiDB数据库之上,由此可扩大TiDB数据库的应用范围。
附图说明
图1为本发明实施例方案涉及的硬件运行环境的设备结构示意图;
图2为本发明任务处理方法第一实施例的流程示意图;
图3为本发明任务处理装置第一实施例的功能模块示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
参照图1,图1为本发明实施例方案涉及的硬件运行环境的设备结构示意图。
本发明实施例任务处理设备可以是服务器,也可以是PC(Personal Computer,个人计算机)、平板电脑、便携计算机、虚拟机等终端设备。
如图1所示,该任务处理设备可以包括:处理器1001,例如CPU,通信总线1002,用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、输入单元比如键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如Wi-Fi接口)。存储器1005可以是高速RAM存储器,也可以是稳定的存储器(non-volatile memory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
本领域技术人员可以理解,图1中示出的任务处理设备结构并不构成对任务处理设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
如图1所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块以及任务处理程序。
在图1所示的终端中,网络接口1004主要用于连接后台服务器,与后台服务器进行数据通信;用户接口1003主要用于连接客户端,与客户端进行数据通信;而处理器1001可以用于调用存储器1005中存储的任务处理程序,并执行以下操作:
每隔第一预设时间通过轮询线程开启第一事务;
向目标数据库发送查询命令,得到第一返回结果,并根据所述第一返回结果判断是否存在指定类型且处于空闲状态的互斥锁;
若存在指定类型且处于空闲状态的互斥锁,则向所述目标数据库发送第一更新命令,得到第二返回结果,并根据所述第二返回结果判断所述互斥锁是否已被锁定;
若判定所述互斥锁未被锁定,则向所述目标数据库提交所述第一事务,以竞争获取互斥锁,并进行任务处理。
进一步地,处理器1001可以调用存储器1005中存储的任务处理程序,还执行以下操作:
每隔第一预设时间获取轮询线程的上下文信息,并根据所述上下文信息判断所述轮询线程中是否存在处理事务;
若所述轮询线程中存在处理事务,则通过所述轮询线程创建第一同步等待线程,并在所述第一同步等待线程中开启第一事务;
若所述轮询线程中不存在处理事务,则在所述轮询线程中开启第一事务。
进一步地,处理器1001可以调用存储器1005中存储的任务处理程序,还执行以下操作:
当侦测到所述第一事务提交成功、获取到互斥锁时,在所述轮询线程中开启第二事务;
通过所述轮询线程查询任务列表,得到待执行任务;
对所述待执行任务进行标记,并将标记后的待执行任务提交到线程池进行处理;
当侦测到任务处理完成时,向所述目标数据库提交所述第二事务。
进一步地,处理器1001可以调用存储器1005中存储的任务处理程序,还执行以下操作:
通过所述轮询线程开启第三事务;
向所述目标数据库发送第二更新命令,以释放所述互斥锁,并向所述目标数据库提交所述第三事务。
进一步地,处理器1001可以调用存储器1005中存储的任务处理程序,还执行以下操作:
获取所述轮询线程的上下文信息,并根据所述上下文信息判断所述轮询线程中是否存在处理事务;
若所述轮询线程中存在处理事务,则通过所述轮询线程创建第二同步等待线程,并在所述第二同步等待线程中开启第三事务;
若所述轮询线程中不存在处理事务,则在所述轮询线程中开启第三事务。
进一步地,处理器1001可以调用存储器1005中存储的任务处理程序,还执行以下操作:
当根据所述第一返回结果判定不存在指定类型且处于空闲状态的互斥锁时,或当根据所述第二返回结果判定所述互斥锁已被锁定时,或当侦测到所述第一事务提交失败时,记录互斥锁获取失败的信息,并在经过第二预设时间时返回执行步骤:向目标数据库发送查询命令,得到第一返回结果,并根据所述第一返回结果判断是否存在指定类型且处于空闲状态的互斥锁。
进一步地,所述失败的信息中包括第一返回结果信息,处理器1001可以调用存储器1005中存储的任务处理程序,还执行以下操作:
判断所述失败的信息的数量是否超过预设阈值;
若超过预设阈值,则根据所述第一返回结果信息判断各第一返回结果是否均为空;
若各第一返回结果均为空,则向所述目标数据库发送第三更新命令,以强制释放所述互斥锁。
基于上述硬件结构,提出本发明任务处理方法的各实施例。
本发明提供一种任务处理方法。
参照图2,图2为本发明任务处理方法第一实施例的流程示意图。
在本实施例中,该任务处理方法包括:
步骤S10,每隔第一预设时间通过轮询线程开启第一事务;
现有技术中,在任务执行过程中,各应用实例中的各线程先竞争互斥锁,获得互斥锁之后,即可获取到任务执行权,可从任务列表中获取到待执行任务,然后将待执行任务提交到执行线程池中进行处理,最后将互斥锁释放。
由于传统关系型数据库的锁类型为悲观锁,悲观锁表示一个线程在修改数据之前,必须先对该数据进行锁定,以防止其他线程在同一时刻对该数据进行修改;如果事先已经有其他线程对该数据进行了锁定,当前线程必须被阻塞等待,直到持有线程将锁释放后再被当前线程锁定成功,或者被阻塞至事务超时。传统关系数据库在竞争互斥锁时,会执行命令select*frommutex_lock where lock_name=’taskTypeN’for update;该命令会阻塞等待,直到获取到互斥锁或者事务超时为止。也就是说,传统关系数据库在竞争互斥锁时,只有其中某一应用实例中的某一线程竞争得到互斥锁,进而执行后续的任务执行步骤。
而TiDB数据库的锁类型为乐观锁,乐观锁表示一个线程在修改数据之前,无需先对该数据进行锁定,数据库只在事务提交时检测是否有冲突,如果有冲突则回滚事务并报错。若将传统关系型数据库的任务竞争与互斥方法应用于TiDB数据库,由于乐观锁没有阻塞等待机制,会造成以下现象:多个应用实例的多个线程一起竞争互斥锁,进而执行任务,再释放互斥锁,在释放互斥锁时,只有某一应用实例中的某一线程会提交成功。而此时TiDB数据库检测到冲突时,事务回滚,但任务已经被提交执行了。因此,在任务处理过程中,传统关系型数据库的任务竞争与互斥方法并不适用于TiDB数据库。目前,为实现基于TiDB数据库的任务竞争与互斥,通常会将互斥锁迁移到分布式缓存中来实现,比如Redis,但是该种做法存在以下缺点:1)引入了额外的部署单元,会提高编码成本、部署成本及运维成本;2)当Redis服务宕机时,或者当Redis的网络线路不通时,任务将无法处理。
为解决上述缺陷,提出本发明的技术方案,实现了在不引入额外基础软件设施的基础上、基于TiDB乐观锁实现任务竞争与互斥,进而获取到互斥锁进行任务处理,从而可节省成本、部署成本及运维成本,同时可避免因额外引入的基础软件设施故障导致任务无法处理的情况。
本实施例的任务处理方法是由任务处理设备实现的。在本实施例中,当任务处理系统启动时,可每隔第一预设时间通过轮询线程开启第一事务。其中,第一预设时间是预先根据实际需要设定的,此处不作具体限定;轮询线程是预先在应用实例中定义的,每台任务处理设备上可以包含一个或多个应用实例,每个应用实例上又可以包含一个或多个轮询线程。
具体的,步骤S10包括:
步骤a1,每隔第一预设时间获取轮询线程的上下文信息,并根据所述上下文信息判断所述轮询线程中是否存在处理事务;
步骤a2,若所述轮询线程中存在处理事务,则通过所述轮询线程创建第一同步等待线程,并在所述第一同步等待线程中开启第一事务;
步骤a3,若所述轮询线程中不存在处理事务,则在所述轮询线程中开启第一事务。
本实施例中,每隔第一预设时间获取轮询线程的上下文信息,并根据上下文信息判断轮询线程中是否存在处理事务。
若轮询线程中存在处理事务,此时,为避免即将开启的第一事务对轮询线程中的处理事务造成影响,可通过轮询线程创建第一同步等待线程,并在第一同步等待线程中开启第一事务,进而通过第一同步等待线程执行下述步骤S20-S40。通过新建第一同步等待线程来开启第一事务,可将第一事务与轮询线程中的处理事务相隔离,从而避免对轮询线程中的处理事务造成影响。
若轮询线程中不存在处理事务,此时,则可以直接在轮询线程中开启第一事务,进而通过轮询线程执行下述步骤S20-S40。
当然,可以理解的是,若轮询线程中不存在处理事务,此时,也可以通过轮询线程创建第一同步等待线程,并在第一同步等待线程中开启第一事务,进而通过第一同步等待线程执行下述步骤S20-S40。
步骤S20,向目标数据库发送查询命令,得到第一返回结果,并根据所述第一返回结果判断是否存在指定类型且处于空闲状态的互斥锁;
在开启第一事务后,向目标数据库发送查询命令,得到第一返回结果。该目标数据库可选地为TiDB数据库,后续以TiDB数据库进行说明。查询命令为:select*from mutex_lock where lock_name=‘taskTypeN’and host_ip=0for update,该查询命令用于指示TiDB数据库对mutex_lock(互斥锁)定义表中的‘taskTypeN’记录加上乐观锁。需要说明的是,该查询命令中通过限定查询host_ip=0,可用于判定该指定类型的互斥锁是否处于空闲状态,若该互斥锁不处于空闲状态,即被其他应用实例的线程持有时,host_ip会被更新为其他应用实例的ip)。其中,mutex_lock定义表如下:
比如,对于任务类型taskType1,其初始配置为:
lock_name:taskType1
host_ip:0
thread_id:0
update_datetime:0。
对应的,目标数据库在接收到该查询命令时,会查询该mutex_lock定义表,进而返回对应的查询结果集至任务处理设备。任务处理设备在接收到第一返回结果(即返回的查询结果集)时,根据第一返回结果判断是否存在指定类型且处于空闲状态的互斥锁。若第一返回结果不为空,则判定存在指定类型且处于空闲状态的互斥锁;若第一返回结果为空,则判定不存在指定类型且处于空闲状态的互斥锁。
若存在指定类型且处于空闲状态的互斥锁,则执行步骤S30:向所述目标数据库发送第一更新命令,得到第二返回结果,并根据所述第二返回结果判断所述互斥锁是否已被锁定;
若存在指定类型且处于空闲状态的互斥锁,则向目标数据库(即TiDB数据库)发送第一更新命令,得到第二返回结果。其中,第一更新命令为:update mutex_lock set host_ip=‘当前实例ip’,thread_id=‘轮询线程id’,update_datetime=‘当前日期时间’wherelock_name=‘taskTypeN’and host_ip=0,该第一更新命令用于指示TiDB数据库将当前应用实例的实例ip(Internet Protocol,网际互连协议)和轮询线程id(identity document,标识号),作为持有标记,设置于‘taskTypeN’记录之上。对应的,目标数据库在接收到该第一更新命令时,会获取实例ip和轮询线程id,并设置于‘taskTypeN’记录之上,若更新成功了,则会返回结果1至任务处理设备;若更新失败了(当taskTypeN互斥锁已被锁定时),则会返回结果0至任务处理设备。对应的,任务处理设备在接收到第二返回结果时,根据第二返回结果判断该互斥锁是否已被锁定。若第二返回结果为1,则判定该互斥锁未被锁定;若第二返回结果为0,则判定该互斥锁已被锁定。
进一步地,若不存在指定类型且处于空闲状态的互斥锁,则在经过第二预设时间时,返回执行步骤S20。其中,第二预设时间可以根据实际情况具体设定,此处不作具体限定。可选地,该第二预设时间小于第一预设时间。
若判定所述互斥锁未被锁定,则执行步骤S40:向所述目标数据库提交所述第一事务,以竞争获取互斥锁,并进行任务处理。
若判定互斥锁未被锁定,则向目标数据库提交第一事务,以竞争获取互斥锁,并进行任务处理。若第一事务提交成功,则说明成功获取到该互斥锁,此时,则进行任务处理。若第一事务提交失败,则说明当前线程与其他线程有事务冲突,获取互斥锁失败,则在经过第二预设时间时,返回执行步骤S20。
进一步地,若判定该互斥锁已被锁定,则在经过第二预设时间时,返回执行步骤S20。
本实施例中,仅在判定存在指定类型且处于空闲状态的互斥锁时,才向TiDB数据库发送第一更新命令,进而在判定互斥锁未被锁定时,才向TiDB数据库提交第一事务,以竞争获取互斥锁,当竞争获取到互斥锁时,方可进行任务处理;而一旦判定不存在指定类型且处于空闲状态的互斥锁、或互斥锁已被锁定、或第一事务提交失败时,则返回执行“向TiDB数据发送查询命令”的步骤。通过上述方式,在乐观锁的基础上,增加检测判断和返回执行查询是否存在指定类型且处于空闲状态的互斥锁的过程,实际上相当增加了一种“阻塞”机制,从而使得最终只有某一应用实例中的某一线程竞争得到互斥锁。也就是说,本实施例通过重试性的事务包装、设置持有标记的方式,将TiDB的乐观锁机制,转换为悲观锁的行为,从而使得在乐观锁机制下,最终也只有某一应用实例中的某一线程竞争得到互斥锁,避免了“当TiDB数据库检测到冲突时,事务回滚,但任务已经被提交执行了”这一现象的发生。
本发明实施例提供一种任务处理方法,每隔第一预设时间通过轮询线程开启第一事务;向目标数据库(即TiDB数据库)发送查询命令,得到第一返回结果,并根据第一返回结果判断是否存在指定类型且处于空闲状态的互斥锁;若存在指定类型且处于空闲状态的互斥锁,则向目标数据库发送第一更新命令,得到第二返回结果,并根据第二返回结果判断互斥锁是否已被锁定;若判定互斥锁未被锁定,则向目标数据库提交第一事务,以竞争获取互斥锁,并进行任务处理。通过上述方式,在TiDB乐观锁的基础上,增加检测判断的过程,只在符合条件时方可竞争获取互斥锁,实际上相当增加了一种“阻塞”机制,从而使得最终只有某一应用实例中的某一线程竞争得到互斥锁,本发明无需引入额外基础软件设施,在TiDB乐观锁的基础上实现任务的竞争与互斥,相比于现有技术中将互斥锁迁移到分布式缓存中以实现任务的竞争与互斥,本发明可节省编码成本、部署成本及运维成本,同时,基于本发明的任务竞争与互斥机制,可使得各种任务处理程序运行于TiDB数据库之上,由此可扩大TiDB数据库的应用范围。
进一步地,基于图2所示的第一实施例,提出本发明任务处理方法的第二实施例。
在本实施例中,在步骤S40之后,该任务处理方法还包括:
步骤A,当侦测到所述第一事务提交成功、获取到互斥锁时,在所述轮询线程中开启第二事务;
在本实施例中,当侦测到第一事务提交成功、获取到互斥锁时,此时,则可以进行任务处理,具体的,先在轮询线程中开启第二事务。
需要说明的是,由于轮询线程的主要处理事务即为任务处理这一事务,因此无需新建一线程来进行任务处理。此外,还需要说明的是,对于第一事务提交成功、获取到互斥锁的侦测方法包括:1)若互斥锁的竞争过程(即步骤S20-S40),是直接通过轮询线程实现的,此时,则可以通过侦测轮询线程是否接收到目标数据库返回的第一事务提交成功的消息,来侦测第一事务是否提交成功;2)若互斥锁的竞争过程(即步骤S20-S40),是通过第一同步等待线程实现的,此时,则可以通过侦测轮询线程是否接收到第一同步等待线程返回的第一事务提交成功的消息,来侦测第一事务是否提交成功。
步骤B,通过所述轮询线程查询任务列表,得到待执行任务;
步骤C,对所述待执行任务进行标记,并将标记后的待执行任务提交到线程池进行处理;
步骤D,当侦测到任务处理完成时,向所述目标数据库提交所述第二事务。
然后,通过轮询线程查询任务列表,得到待执行任务,然后对待执行任务进行标记,如可将带执行任务标记为执行中,并标记对应的实例ip,进而将标记后的待执行任务提交到线程池进行处理。最后,当侦测到任务处理完成时,向目标数据库提交第二事务。
本实施例中,在侦测到第一事务提交成功、获取到互斥锁时,获取待执行任务,并提交到线程池进行处理。通过上述方式,可实现数据库任务的处理。
进一步地,基于上述第二实施例,提出本发明任务处理方法的第三实施例。
在本实施例中,在步骤D之后,该任务处理方法还包括:
步骤E,通过所述轮询线程开启第三事务;
在任务处理完成后,需释放互斥锁,以使得其他线程后续可对该互斥锁进行锁定。本实施例中,先通过轮询线程开启第三事务。
具体的,步骤E包括:
步骤e1,获取所述轮询线程的上下文信息,并根据所述上下文信息判断所述轮询线程中是否存在处理事务;
步骤e2,若所述轮询线程中存在处理事务,则通过所述轮询线程创建第二同步等待线程,并在所述第二同步等待线程中开启第三事务;
步骤e3,若所述轮询线程中不存在处理事务,则在所述轮询线程中开启第三事务。
获取轮询线程的上下文信息,并根据上下文信息判断轮询线程中是否存在处理事务;
若轮询线程中存在处理事务,此时,为避免即将开启的第三事务对轮询线程中的处理事务造成影响,可通过轮询线程创建第二同步等待线程,并在第二同步等待线程中开启第三事务,进而通过第一同步等待线程执行下述步骤F。
若轮询线程中不存在处理事务,此时,则可以直接在轮询线程中开启第三事务,进而通过轮询线程执行下述步骤F。
可以理解的是,若轮询线程中不存在处理事务,此时,也可以通过轮询线程创建第二同步等待线程,并在第二同步等待线程中开启第三事务,进而通过第一同步等待线程执行下述步骤F。
还需要说明的是,若在开启第一事务时,已获取到轮询线程的上下文信息,并根据上下文信息判定出轮询线程中是否存在处理事务,此时,则可以直接基于判定结果执行对应的步骤,无需再次获取轮询线程的上下文信息并进行判断。
步骤F,向所述目标数据库发送第二更新命令,以释放所述互斥锁,并向所述目标数据库提交所述第三事务。
在开启第三事务之后,向目标数据库发送第二更新命令,以释放互斥锁,并向目标数据库提交第三事务。其中,第二更新命令为:update mutex_lock set host_ip=0,thread_id=0,update_datetime=‘当前日期时间’where lock_name=‘taskTypeN’andhost_ip=‘当前实例ip’and thread_id=‘轮询线程id’,该第二更新命令用于指示目标数据库清除当前线程在taskTypeN记录上的锁持有标记(包括当前实例ip和轮询线程id),以释放互斥锁。
本实施例中,通过轮询线程开启第三事务,进而向目标数据库发送第二更新命令,以释放互斥锁,并向目标数据库提交第三事务。通过上述方式,可清除当前线程在互斥锁上的持有标记,以释放互斥锁,从而使得其他线程后续可对该互斥锁进行锁定。
进一步地,基于上述第一实施例,提出本发明任务处理方法的第四实施例。
在本实施例中,该任务处理方法还包括:
步骤G,当根据所述第一返回结果判定不存在指定类型且处于空闲状态的互斥锁时,或当根据所述第二返回结果判定所述互斥锁已被锁定时,或当侦测到所述第一事务提交失败时,记录互斥锁获取失败的信息,并在经过第二预设时间时返回执行步骤:向目标数据库发送查询命令,得到第一返回结果,并根据所述第一返回结果判断是否存在指定类型且处于空闲状态的互斥锁。
在本实施例中,当根据第一返回结果判定不存在指定类型且处于空闲状态的互斥锁时,或当根据第二返回结果判定互斥锁已被锁定时,或当侦测到第一事务提交失败时,记录互斥锁获取失败的信息,该失败的信息至少包括第一返回结果信息,还可以包括失败原因、第二返回结果信息等信息,然后在经过第二预设时间时返回执行步骤:向目标数据库发送查询命令,得到第一返回结果,并根据第一返回结果判断是否存在指定类型且处于空闲状态的互斥锁,进而继续执行后续步骤,具体的执行过程可参照上述第一实施例,此处不作赘述。
进一步地,所述失败的信息中包括第一返回结果信息,在步骤G之后,该任务处理方法还包括:
步骤H,判断所述失败的信息的数量是否超过预设阈值;
步骤I,若超过预设阈值,则根据所述第一返回结果信息判断各第一返回结果是否均为空;
步骤J,若各第一返回结果均为空,则向所述目标数据库发送第三更新命令,以强制释放所述互斥锁。
在一些特殊情况下,当某一轮询线程获取到互斥锁之后,如果该轮询线程崩溃,或出现突然宕机等异常情况,会导致该互斥锁将无法释放。因此,本实施例中通过检测是否存在此种情况,并在检测到存在此种情况时,强制释放互斥锁,使得其他线程后续可对该互斥锁进行锁定。
在本实施例中,所记录的互斥锁获取失败的信息中包括第一返回结果信息,第一返回结果信息即为每次互斥锁获取失败时的第一返回结果的集合,任务处理设备可在每次记录完互斥锁获取失败的信息之后,判断所记录的失败的信息的数量是否超过预设阈值;若超过预设阈值,则根据第一返回结果信息判断各第一返回结果是否均为空;若各第一返回结果均为空,则说明该指定类型的互斥锁已经被某个应用实例占有且长时间一直未被释放。此时,向目标数据库发送第三更新命令,以强制释放互斥锁。其中,第三更新命令用于指示目标数据库(TiDB数据库)将持锁时间超过预设时间的指定类型的互斥锁所对应的互斥锁定义表(mutex_lock)中的应用实例ip(host_ip)和线程ip(thread_id)恢复为原始配置值(即0),该第三更新命令可以为:update mutex_lock set host_ip=0,thread_id=0where lock_name=‘taskTypeN’and update_datetime<‘当前日期时间减去n分钟’,该第三更新命令用于指示TiDB数据库将持锁时间超过预设时间n分钟的指定类型taskTypeN的互斥锁所对应的mutex_lock中的host_ip和thread_id更新为原始配置值0,即清除持锁时间超过预设时间的线程在taskTypeN记录上的锁持有标记(包括实例ip和轮询线程id),以使得目标数据库将被持有的且持锁时间超过n分钟的该指定类型的互斥锁强制释放。其中,减去n分钟的目的可以防止判断错误而强制解锁,由于每次拿锁、查询修改提交任务、放锁的时间,不可能超过2分钟,因此,可选地该预设时间可以设为2分钟。当然,在具体实施例中,还可以具体设定该时间值,此处的2分钟并不用于限定本发明。
若失败的信息的数量超过预设阈值,但根据第一返回结果信息判定各第一返回结果中至少一个不为空,则说明互斥锁竞争激烈,此时无需强制解锁,只需等待轮询线程的下一次触发。
本实施例中,在检测到记录的互斥锁获取失败的信息的数量超过预设阈值,且各次失败记录中的第一返回结果均为空时,说明该互斥锁已经被某个应用实例占有且长时间一直未被释放,此时则强制释放互斥锁,从而使得其他线程后续可对该互斥锁进行锁定。
本发明还提供一种任务处理装置。
参照图3,图3为本发明任务处理装置第一实施例的功能模块示意图。
如图3所示,所述任务处理装置包括:
第一开启模块10,用于每隔第一预设时间通过轮询线程开启第一事务;
第一判断模块20,用于向目标数据库发送查询命令,得到第一返回结果,并根据所述第一返回结果判断是否存在指定类型且处于空闲状态的互斥锁;
第二判断模块30,用于若存在指定类型且处于空闲状态的互斥锁,则向所述目标数据库发送第一更新命令,得到第二返回结果,并根据所述第二返回结果判断所述互斥锁是否已被锁定;
互斥锁竞争模块40,用于若判定所述互斥锁未被锁定,则向所述目标数据库提交所述第一事务,以竞争获取互斥锁,并进行任务处理。
进一步地,所述第一开启模块10包括:
第一判断单元,用于每隔第一预设时间获取轮询线程的上下文信息,并根据所述上下文信息判断所述轮询线程中是否存在处理事务;
第一开启单元,用于若所述轮询线程中存在处理事务,则通过所述轮询线程创建第一同步等待线程,并在所述第一同步等待线程中开启第一事务;
所述第一开启单元,还用于若所述轮询线程中不存在处理事务,则在所述轮询线程中开启第一事务。
进一步地,所述任务处理装置还包括:
第二开启模块,用于当侦测到所述第一事务提交成功、获取到互斥锁时,在所述轮询线程中开启第二事务;
任务查询模块,用于通过所述轮询线程查询任务列表,得到待执行任务;
任务提交模块,用于对所述待执行任务进行标记,并将标记后的待执行任务提交到线程池进行处理;
事务提交模块,用于当侦测到任务处理完成时,向所述目标数据库提交所述第二事务。
进一步地,所述任务处理装置还包括:
第三开启模块,用于通过所述轮询线程开启第三事务;
互斥锁释放模块,用于向所述目标数据库发送第二更新命令,以释放所述互斥锁,并向所述目标数据库提交所述第三事务。
进一步地,所述第三开启模块包括:
第二判断单元,用于获取所述轮询线程的上下文信息,并根据所述上下文信息判断所述轮询线程中是否存在处理事务;
第二开启单元,用于若所述轮询线程中存在处理事务,则通过所述轮询线程创建第二同步等待线程,并在所述第二同步等待线程中开启第三事务;
所述第二开启单元,还用于若所述轮询线程中不存在处理事务,则在所述轮询线程中开启第三事务。
进一步地,所述任务处理装置还包括:
信息记录模块,用于当根据所述第一返回结果判定不存在指定类型且处于空闲状态的互斥锁时,或当根据所述第二返回结果判定所述互斥锁已被锁定时,或当侦测到所述第一事务提交失败时,记录互斥锁获取失败的信息,并在经过第二预设时间时返回执行步骤:向目标数据库发送查询命令,得到第一返回结果,并根据所述第一返回结果判断是否存在指定类型且处于空闲状态的互斥锁。
进一步地,所述失败的信息中包括第一返回结果信息,所述任务处理装置还包括:
第三判断模块,用于判断所述失败的信息的数量是否超过预设阈值;
第四判断模块,用于若超过预设阈值,则根据所述第一返回结果信息判断各第一返回结果是否均为空;
强制释放模块,用于若各第一返回结果均为空,则向所述目标数据库发送第三更新命令,以强制释放所述互斥锁。
其中,上述任务处理装置中各个模块的功能实现与上述任务处理方法实施例中各步骤相对应,其功能和实现过程在此处不再一一赘述。
本发明还提供一种计算机可读存储介质,该计算机可读存储介质上存储有任务处理程序,所述任务处理程序被处理器执行时实现如以上任一项实施例所述的任务处理方法的步骤。
本发明计算机可读存储介质的具体实施例与上述任务处理方法各实施例基本相同,在此不作赘述。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种任务处理方法,其特征在于,所述任务处理方法包括:
每隔第一预设时间通过轮询线程开启第一事务;
向目标数据库发送查询命令,得到第一返回结果,并根据所述第一返回结果判断是否存在指定类型且处于空闲状态的互斥锁;
若存在指定类型且处于空闲状态的互斥锁,则向所述目标数据库发送第一更新命令,得到第二返回结果,并根据所述第二返回结果判断所述互斥锁是否已被锁定;
若判定所述互斥锁未被锁定,则向所述目标数据库提交所述第一事务,以竞争获取互斥锁,并进行任务处理。
2.如权利要求1所述的任务处理方法,其特征在于,所述每隔第一预设时间通过轮询线程开启第一事务的步骤包括:
每隔第一预设时间获取轮询线程的上下文信息,并根据所述上下文信息判断所述轮询线程中是否存在处理事务;
若所述轮询线程中存在处理事务,则通过所述轮询线程创建第一同步等待线程,并在所述第一同步等待线程中开启第一事务;
若所述轮询线程中不存在处理事务,则在所述轮询线程中开启第一事务。
3.如权利要求1所述的任务处理方法,其特征在于,所述任务处理方法还包括:
当侦测到所述第一事务提交成功、获取到互斥锁时,在所述轮询线程中开启第二事务;
通过所述轮询线程查询任务列表,得到待执行任务;
对所述待执行任务进行标记,并将标记后的待执行任务提交到线程池进行处理;
当侦测到任务处理完成时,向所述目标数据库提交所述第二事务。
4.如权利要求3所述的任务处理方法,其特征在于,所述当侦测到任务处理完成时,向所述目标数据库提交所述第二事务的步骤之后,还包括:
通过所述轮询线程开启第三事务;
向所述目标数据库发送第二更新命令,以释放所述互斥锁,并向所述目标数据库提交所述第三事务。
5.如权利要求4所述的任务处理方法,其特征在于,所述通过所述轮询线程开启第三事务的步骤包括:
获取所述轮询线程的上下文信息,并根据所述上下文信息判断所述轮询线程中是否存在处理事务;
若所述轮询线程中存在处理事务,则通过所述轮询线程创建第二同步等待线程,并在所述第二同步等待线程中开启第三事务;
若所述轮询线程中不存在处理事务,则在所述轮询线程中开启第三事务。
6.如权利要求1至5中任一项所述的任务处理方法,其特征在于,所述任务处理方法还包括:
当根据所述第一返回结果判定不存在指定类型且处于空闲状态的互斥锁时,或当根据所述第二返回结果判定所述互斥锁已被锁定时,或当侦测到所述第一事务提交失败时,记录互斥锁获取失败的信息,并在经过第二预设时间时返回执行步骤:向目标数据库发送查询命令,得到第一返回结果,并根据所述第一返回结果判断是否存在指定类型且处于空闲状态的互斥锁。
7.如权利要求6所述的任务处理方法,其特征在于,所述失败的信息中包括第一返回结果信息,所述任务处理方法还包括:
判断所述失败的信息的数量是否超过预设阈值;
若超过预设阈值,则根据所述第一返回结果信息判断各第一返回结果是否均为空;
若各第一返回结果均为空,则向所述目标数据库发送第三更新命令,以强制释放所述互斥锁。
8.一种任务处理装置,其特征在于,所述任务处理装置包括:
第一开启模块,用于每隔第一预设时间通过轮询线程开启第一事务;
第一判断模块,用于向目标数据库发送查询命令,得到第一返回结果,并根据所述第一返回结果判断是否存在指定类型且处于空闲状态的互斥锁;
第二判断模块,用于若存在指定类型且处于空闲状态的互斥锁,则向所述目标数据库发送第一更新命令,得到第二返回结果,并根据所述第二返回结果判断所述互斥锁是否已被锁定;
互斥锁竞争模块,用于若判定所述互斥锁未被锁定,则向所述目标数据库提交所述第一事务,以竞争获取互斥锁,并进行任务处理。
9.一种任务处理设备,其特征在于,所述任务处理设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的任务处理程序,所述任务处理程序被所述处理器执行时实现如权利要求1至7中任一项所述的任务处理方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有任务处理程序,所述任务处理程序被处理器执行时实现如权利要求1至7中任一项所述的任务处理方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010180590.6A CN111400330B (zh) | 2020-03-13 | 2020-03-13 | 任务处理方法、装置、设备及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010180590.6A CN111400330B (zh) | 2020-03-13 | 2020-03-13 | 任务处理方法、装置、设备及计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111400330A true CN111400330A (zh) | 2020-07-10 |
CN111400330B CN111400330B (zh) | 2024-04-09 |
Family
ID=71435233
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010180590.6A Active CN111400330B (zh) | 2020-03-13 | 2020-03-13 | 任务处理方法、装置、设备及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111400330B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112199391A (zh) * | 2020-09-30 | 2021-01-08 | 深圳前海微众银行股份有限公司 | 一种数据加锁检测方法、设备及计算机可读存储介质 |
CN112435004A (zh) * | 2020-11-20 | 2021-03-02 | 金蝶软件(中国)有限公司 | 一种实现业务流程化处理的方法及装置 |
CN112948399A (zh) * | 2021-05-17 | 2021-06-11 | 太平金融科技服务(上海)有限公司深圳分公司 | 序列号生成方法、装置、计算机设备和存储介质 |
CN114138808A (zh) * | 2021-12-07 | 2022-03-04 | 中国建设银行股份有限公司 | 数据更新方法、装置、电子设备及可读存储介质 |
CN115878648A (zh) * | 2023-02-22 | 2023-03-31 | 成都成电医星数字健康软件有限公司 | 数据逻辑时序自动调整方法、装置、电子设备及存储介质 |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20000033403A (ko) * | 1998-11-23 | 2000-06-15 | 정선종 | 교착 상태 검출을 위한 락 대기 정보의 상호배제방법 |
US20010014905A1 (en) * | 1999-12-27 | 2001-08-16 | Tamiya Onodera | Method and apparatus for managing a lock for an object |
US20050066064A1 (en) * | 2003-09-19 | 2005-03-24 | International Business Machines Corporation | Fault tolerant mutual exclusion locks for shared memory systems |
CN1973266A (zh) * | 2004-04-02 | 2007-05-30 | 西姆毕恩软件有限公司 | 对或涉及用于计算装置的操作系统的改进 |
US7814488B1 (en) * | 2002-09-24 | 2010-10-12 | Oracle America, Inc. | Quickly reacquirable locks |
CN106909599A (zh) * | 2016-07-04 | 2017-06-30 | 阿里巴巴集团控股有限公司 | 一种集群系统、消息处理方法及装置 |
US20170220474A1 (en) * | 2016-02-01 | 2017-08-03 | Oracle International Corporation | System and Method for Promoting Reader Groups for Lock Cohorting |
CN108874552A (zh) * | 2018-06-28 | 2018-11-23 | 杭州云英网络科技有限公司 | 分布式锁执行方法、装置及系统、应用服务器和存储介质 |
CN109032798A (zh) * | 2018-07-25 | 2018-12-18 | 天津凯发电气股份有限公司 | 一种电能质量管理系统共享内存锁控制方法 |
CN110113387A (zh) * | 2019-04-17 | 2019-08-09 | 深圳前海微众银行股份有限公司 | 一种基于分布式批量处理系统的处理方法、装置及系统 |
CN110716936A (zh) * | 2019-10-12 | 2020-01-21 | 浪潮云信息技术有限公司 | 一种基于SpringBoot+JPA的数据库乐观锁实现方法及系统 |
-
2020
- 2020-03-13 CN CN202010180590.6A patent/CN111400330B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20000033403A (ko) * | 1998-11-23 | 2000-06-15 | 정선종 | 교착 상태 검출을 위한 락 대기 정보의 상호배제방법 |
US20010014905A1 (en) * | 1999-12-27 | 2001-08-16 | Tamiya Onodera | Method and apparatus for managing a lock for an object |
US7814488B1 (en) * | 2002-09-24 | 2010-10-12 | Oracle America, Inc. | Quickly reacquirable locks |
US20050066064A1 (en) * | 2003-09-19 | 2005-03-24 | International Business Machines Corporation | Fault tolerant mutual exclusion locks for shared memory systems |
CN1973266A (zh) * | 2004-04-02 | 2007-05-30 | 西姆毕恩软件有限公司 | 对或涉及用于计算装置的操作系统的改进 |
US20170220474A1 (en) * | 2016-02-01 | 2017-08-03 | Oracle International Corporation | System and Method for Promoting Reader Groups for Lock Cohorting |
CN106909599A (zh) * | 2016-07-04 | 2017-06-30 | 阿里巴巴集团控股有限公司 | 一种集群系统、消息处理方法及装置 |
CN108874552A (zh) * | 2018-06-28 | 2018-11-23 | 杭州云英网络科技有限公司 | 分布式锁执行方法、装置及系统、应用服务器和存储介质 |
CN109032798A (zh) * | 2018-07-25 | 2018-12-18 | 天津凯发电气股份有限公司 | 一种电能质量管理系统共享内存锁控制方法 |
CN110113387A (zh) * | 2019-04-17 | 2019-08-09 | 深圳前海微众银行股份有限公司 | 一种基于分布式批量处理系统的处理方法、装置及系统 |
CN110716936A (zh) * | 2019-10-12 | 2020-01-21 | 浪潮云信息技术有限公司 | 一种基于SpringBoot+JPA的数据库乐观锁实现方法及系统 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112199391A (zh) * | 2020-09-30 | 2021-01-08 | 深圳前海微众银行股份有限公司 | 一种数据加锁检测方法、设备及计算机可读存储介质 |
CN112199391B (zh) * | 2020-09-30 | 2024-02-23 | 深圳前海微众银行股份有限公司 | 一种数据加锁检测方法、设备及计算机可读存储介质 |
CN112435004A (zh) * | 2020-11-20 | 2021-03-02 | 金蝶软件(中国)有限公司 | 一种实现业务流程化处理的方法及装置 |
CN112948399A (zh) * | 2021-05-17 | 2021-06-11 | 太平金融科技服务(上海)有限公司深圳分公司 | 序列号生成方法、装置、计算机设备和存储介质 |
CN112948399B (zh) * | 2021-05-17 | 2021-08-03 | 太平金融科技服务(上海)有限公司深圳分公司 | 序列号生成方法、装置、计算机设备和存储介质 |
CN114138808A (zh) * | 2021-12-07 | 2022-03-04 | 中国建设银行股份有限公司 | 数据更新方法、装置、电子设备及可读存储介质 |
CN115878648A (zh) * | 2023-02-22 | 2023-03-31 | 成都成电医星数字健康软件有限公司 | 数据逻辑时序自动调整方法、装置、电子设备及存储介质 |
CN115878648B (zh) * | 2023-02-22 | 2023-05-05 | 成都成电医星数字健康软件有限公司 | 数据逻辑时序自动调整方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111400330B (zh) | 2024-04-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111400330B (zh) | 任务处理方法、装置、设备及计算机可读存储介质 | |
CN110968478B (zh) | 日志采集方法、服务器及计算机存储介质 | |
CN109451020B (zh) | 超时管理方法、设备及计算机可读存储介质 | |
CN110413687B (zh) | 基于节点互证校验的分布式事务故障处理方法及相关设备 | |
CN112732406B (zh) | 一种云平台虚拟机回收方法及计算机设备 | |
CN112052264B (zh) | 业务数据查询方法、装置、电子设备及可读存储介质 | |
CN110677280A (zh) | 服务节点切换方法、装置、设备及计算机可读存储介质 | |
US10997158B2 (en) | Techniques for updating big data tables using snapshot isolation | |
CN109614271B (zh) | 多个集群数据一致性的控制方法、装置、设备及存储介质 | |
CN113157411B (zh) | 一种基于Celery的可靠可配置任务系统及装置 | |
CN110231921B (zh) | 日志打印方法、装置、设备及计算机可读存储介质 | |
CN110852603B (zh) | 高吞吐量的风控数据处理方法、装置、设备及存储介质 | |
CN109246077B (zh) | 分布式并发交易校验方法、装置和计算机存储介质 | |
CN115292092B (zh) | 一种数据回滚方法、装置、设备及其存储介质 | |
CN106855816B (zh) | 终端中应用程序的资源文件加载方法和装置 | |
CN111984424A (zh) | 任务处理方法、装置、设备及计算机可读存储介质 | |
CN114356888A (zh) | 事务处理方法及装置、存储介质及电子设备 | |
CN110188008B (zh) | 作业调度主备切换方法、装置、计算机设备及存储介质 | |
CN114153660A (zh) | 一种数据库备份方法、装置、服务器及介质 | |
CN110806943A (zh) | 基于更新标记的数据更新方法及相关设备 | |
CN113518384B (zh) | 分布式事务处理方法、装置、设备及计算机可读存储介质 | |
CN112954035B (zh) | 服务器重启方法、装置、设备及存储介质 | |
CN108958983B (zh) | 基于数据差异的还原方法、装置、存储介质及用户设备 | |
CN113409109B (zh) | 订单创建方法、装置、服务器及存储介质 | |
CN112650562B (zh) | 数据处理方法、装置、设备及可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |