CN108132831A - 任务的处理方法和处理装置 - Google Patents

任务的处理方法和处理装置 Download PDF

Info

Publication number
CN108132831A
CN108132831A CN201611094438.6A CN201611094438A CN108132831A CN 108132831 A CN108132831 A CN 108132831A CN 201611094438 A CN201611094438 A CN 201611094438A CN 108132831 A CN108132831 A CN 108132831A
Authority
CN
China
Prior art keywords
update
update request
treatment progress
hot spot
record
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.)
Pending
Application number
CN201611094438.6A
Other languages
English (en)
Inventor
章颖强
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201611094438.6A priority Critical patent/CN108132831A/zh
Publication of CN108132831A publication Critical patent/CN108132831A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种任务的处理方法和处理装置。其中,该方法包括:获取用于更新数据库记录的至少一个更新请求,其中,每个更新请求包括了不同任务的标识信息;使用第一处理进程执行当前更新数据库记录的当前更新请求,得到更新结果,其中,在第一处理进程执行当前更新请求的过程中,下一个更新请求处于等待状态;使用第二处理进程提交更新结果,其中,如果第二处理进程开始提交更新结果,触发第一处理进程执行下一个更新请求。本发明解决了数据库中单一热点记录行锁的互斥形成全局串行点的技术问题。

Description

任务的处理方法和处理装置
技术领域
本发明涉及数据库技术领域,具体而言,涉及一种任务的处理方法和处理装置。
背景技术
随着互联网技术的快速发展,由于在线交易具有方便快捷的优点,其已成为人们日常生活中进行购物、娱乐所必不可少的途径。
当用户进行在线交易时,后台数据库中的某些记录由于在短时间内被多次更新,从而形成热点记录,例如,在“双十一购物节”中爆款商品的抢购,其爆款商品的数量在数据库中所在的记录就会形成热点记录。此外,热点记录的问题同样会出现在限购、红包等大量的业务数据库中。
在现有的关系型数据库中,通过以下方法对热点记录进行处理:
(1)找到对应的热点记录(例如,通过B树或哈希表等查找到热点记录),并对该热点记录进行加行锁处理(例如对该热点记录进行加X锁处理),然后再判断是否存在行锁冲突,如果存在行锁冲突,则等待预定时间后,再重复上述操作,否则,执行步骤(2)。
(2)更新已经过加锁处理的热点记录,生成重做日志。
(3)当收到提交命令或者根据autocommit等配置自动提交时,释放任务所持有的行锁,其中,在持有行锁的任务提交以前,其他更新同一记录的任务只能在行锁上等待。
上述对热点记录处理的方法存在以下问题:
(1)单一热点行锁的互斥形成全局串行点
由于从对热点记录进行加锁开始,到任务提交释放锁为止,这段时间其他任务是无法进行的,从而形成了提高热点记录更新的性能瓶颈。
(2)大量连接对同一行锁的争抢和等待引发资源空耗和系统拥堵
当大量连接对同一热点记录争抢时,可能使得死锁的检测时间变长,引擎层中活跃的线程过多,从而导致热点记录的吞吐量进一步下降。
由上可知,在目前的关系型数据库中,当对数据库中的一行进行更新操作时,需要先对改行进行行锁,由于这些行锁之间是相互排斥的,从而导致在对数据库中的热点记录进行更新时,所有的更新步骤必须串行执行。同时,在对数据库进行更新操作时,需要进行数据库连接以及其他操作,这些操作又增加了检测页面锁/死锁的耗时,从而进一步影响了数据库更新的速度。
针对上述问题,现有技术大多都是通过如下方法来改进热点记录的吞吐量的:
(1)通过特定的语法和语法标记,降低热点记录持有行锁的时间
例如,通过对SQL语言加入特定的语法和语法标记,使得本来要多个SQL才能完成的功能,现在只需要一个带有语法标记的特殊语法的SQL就能完成,这样使得热点记录持有行锁时间降低到一个SQL执行时间以内。
(2)通过限制活跃线程,降低热点记录的行锁的争抢
通过在存储引擎中限制持有锁的活跃线程的数量,使得不会有过多的连接/线程同时争抢热点记录的行锁,进而可以降低系统的内耗以及死锁检测的代价。
(3)通过外部队列,降低热点行锁争抢
例如,通过在SQL中注入特定的语法标记,使相同热点记录的SQL在引擎外的一个队列中等待,从而降低系统的内耗和死锁检测代价。
由上可知,现有的技术方法只能从降低热点记录持有行锁的时间以及降低热点记录的行锁争抢线程两方面来提升热点记录的更新性能,上述方法存在以下两个不可避免的缺点:
(1)热点记录的行锁的并发问题无法解决。
在现有的技术方案中无论如何优化或降低热点记录持有行锁的时间,最小的热点记录持有行锁的时间总是从记录更新前的加锁开始,到任务提交为止。设热点记录持有行锁的时间为T,那么记录更新的最大吞吐量S=1/T。任务的提交需要持久化重做日志等,一般的耗时为0.1~1毫秒,因此热点记录更新的吞吐量在理论上的最大值在1000~10000TPS(任务每秒)范围内。
(2)热点记录的解决方案降低了非热点记录的更新性能。
在现有的技术方案中,无论采用限制活跃线程还是外部队列方案,都会对非热点记录的更新速度产生负面影响,因此只能在已知会出现热点记录的时候,才能开启热点优化功能。对于限制活跃线程的方案,虽然可能降低对热点记录的行锁的争抢并发度,但是同样会限制非热点记录的更新线程的执行,从而降低了非热点记录以及整体的更新吞吐量。而对于外部队列方案,需要业务提前识别出热点记录,并对SQL进行特定的语法标记。上述操作不仅会增加业务的开发成本,而且当存在大量的非热点记录需要更新时,数据库内部会产生大量的队列,消耗大量的资源,导致整体性能下降。
针对上述数据库中单一热点记录锁的互斥形成全局串行点以及大量连接对同一行锁的争抢和等待引发资源空耗和系统拥堵的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种任务的处理方法和处理装置,以至少解决数据库中单一热点记录行锁的互斥形成全局串行点的技术问题。
根据本发明实施例的一个方面,提供了一种任务的处理方法,包括:获取用于更新数据库记录的至少一个更新请求,其中,每个更新请求包括了不同任务的标识信息;使用第一处理进程执行当前更新数据库记录的当前更新请求,得到更新结果,其中,在第一处理进程执行当前更新请求的过程中,下一个更新请求处于等待状态;使用第二处理进程提交更新结果,其中,如果第二处理进程开始提交更新结果,触发第一处理进程执行下一个更新请求。
根据本发明实施例的另一方面,还提供了一种任务的处理装置,包括:获取模块,用于获取用于更新数据库记录的至少一个更新请求,其中,每个更新请求包括了不同任务的标识信息;执行模块,用于使用第一处理进程执行当前更新数据库记录的当前更新请求,得到更新结果,其中,在第一处理进程执行当前更新请求的过程中,下一个更新请求处于等待状态;提交模块,用于使用第二处理进程提交更新结果,其中,如果第二处理进程开始提交更新结果,触发第一处理进程执行下一个更新请求。
根据本发明实施例的另一方面,还提供了一种基于数据库的任务处理方法,包括:获取至少一个更新请求,其中,每个更新请求包括了不同任务的标识信息;通过第一处理进程执行用于更新数据库的当前更新请求,得到更新结果,其中,第一处理进程根据当前更新请求对数据库中需要更新的记录进行加锁,并对加锁的记录进行更新,且在第一处理进程执行当前更新请求的过程中,下一个更新请求处于等待状态;将第一处理进程切换为第二处理进程,使用第二处理进程来提交更新结果,其中,如果第二处理进程开始提交更新结果,触发第一处理进程执行下一个更新请求。
在本发明实施例中,采用代理更新和动态队列的方式,通过获取用于更新数据库记录的至少一个更新请求,然后使用第一处理进程执行当前更新数据库记录的当前更新请求,得到更新结果,最后使用第二处理进行提交更新结果,达到了提升热点记录更新性能的目的,从而实现了提高热点记录更新速度的技术效果,进而解决了数据库中单一热点记录行锁的互斥形成全局串行点的技术问题。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的一种可选的计算机终端的硬件结构框图;
图2是根据本发明实施例的一种任务的处理方法的流程示意图;
图3是根据本发明实施例的一种可选的显示界面;
图4是根据本发明实施例的一种可选的任务的处理方法的流程示意图;
图5是根据本发明实施例的一种任务的处理装置的结构示意图;
图6是根据本发明实施例的一种可选的计算机终端的结构示意图;以及
图7是根据本发明实施例的一种基于数据库的任务处理方法流程图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
首先,在对本申请实施例进行描述的过程中出现的部分名词或术语适用于如下解释:
1、关系型数据库:是指建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
2、行锁:是指在数据库中,仅对指定的记录进行加锁,同时其他进程还可以对该记录所在的表中的其他记录进行操作。
3、死锁:是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去,此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程成为死锁进程。
4、X锁:Exclusive Lock,也称排他锁或写锁,是行锁的一种。如果事务T对数据对象A加上X锁,则只允许事务T读取和修改数据对象A,其他任何事务不能再对数据对象A加任何类型的锁,直到事务T释放数据对象A上的锁。X锁可以防止任何其他事务获取资源上的锁,直到在事务的末尾将资源上的原始锁释放为止。
5、热点记录:在一定时间段内对其进行更新操作的次数超过预定值的数据库中的一条记录。
6、哈希表:Hash table,也称散列表,是指根据关键码值直接进行访问的数据结构。
7、重做日志:也称事务日志或前滚日志,是一个与数据库文件分开的文件,它存储对数据库进行的更改,并全部记录插入、更新、删除、提交、回退和数据库模式变化,是备份和恢复的重要组件。
8、存储引擎:也称作表类型,在MySQL中的数据用各种不同的技术存储在文件或内存中,这种用于存储相关数据的文件或内存称为存储引擎。
实施例1
根据本发明实施例,还提供了一种任务的处理方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本申请实施例一所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。图1示出了一种用于实现任务的处理方法的计算机终端(或移动设备)的硬件结构框图。如图1所示,计算机终端10(或移动设备10)可以包括一个或多个(图中采用102a、102b,…...,102n来示出)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器104、以及用于通信功能的传输模块106。除此以外,还可以包括:显示器、输入/输出接口(I/O接口)、通用串行总线(USB)端口(可以作为I/O接口的端口中的一个端口被包括)、网络接口、电源和/或相机。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,计算机终端10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
应当注意到的是上述一个或多个处理器102和/或其他数据处理电路在本文中通常可以被称为“数据处理电路”。该数据处理电路可以全部或部分的体现为软件、硬件、固件或其他任意组合。此外,数据处理电路可为单个独立的处理模块,或全部或部分的结合到计算机终端10(或移动设备)中的其他元件中的任意一个内。如本申请实施例中所涉及到的,该数据处理电路作为一种处理器控制(例如与接口连接的可变电阻终端路径的选择)。
存储器104可用于存储应用软件的软件程序以及模块,如本发明实施例中的任务的处理方法对应的程序指令/数据存储装置,处理器102通过运行存储在存储器104内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的应用程序的漏洞检测方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端10的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(Network Interface Controller,NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
显示器可以例如触摸屏式的液晶显示器(LCD),该液晶显示器可使得用户能够与计算机终端10(或移动设备)的用户界面进行交互。
此处需要说明的是,在一些可选实施例中,上述图1所示的计算机设备(或移动设备)可以包括硬件元件(包括电路)、软件元件(包括存储在计算机可读介质上的计算机代码)、或硬件元件和软件元件两者的结合。应当指出的是,图1仅为特定具体实例的一个实例,并且旨在示出可存在于上述计算机设备(或移动设备)中的部件的类型。
在上述运行环境下,本申请提供了如图2所示的任务的处理方法。图2是根据本发明实施例一的任务的处理方法的流程图,具体包括如下步骤:
步骤S202,获取用于更新数据库记录的至少一个更新请求,其中,每个更新请求包括了不同任务的标识信息。
在上述步骤S202中,上述热点记录可以为在一个特定的时间段内,更新次数超过预定阈值的记录,例如,如果5s内记录更新的次数超过500次,则该条记录即为热点记录。上述更新请求可用于指示数据库中相应的记录进行更新。
图3示出了购买热卖电脑“XXX笔记本电脑”时的显示界面,作为一种可选的实施例,当用户A1在终端设备B1上购买该电脑时,用户A1点击图3中的“+”按钮,选择需要购买电脑的数量,当用户A1点击了“立即购买”按钮后,终端设备B1会产生购买消息,并将该购买消息发送给服务器,服务器根据该购买消息更新数据库。其中,上述购买消息即为更新请求,上述任务为对该记录中的电脑数量进行更新操作。
根据本申请另一个实施例,作为新的更新请求,会进入服务器的更新请求队列,服务器依次读取队列中的内容。
需要说明的是,每个更新请求具有不同的标识信息,上述标识信息可用于区分出不同的更新请求,可以通过提取数据库语句(例如,SQL语句、MySQL语句)中WHERE条件中的主键值或唯一键值,并将提取出的主键值或唯一键值作为标志信息,其中,主键值或唯一键值可以为终端设备的名称或IP地址,例如,终端设备B1发送给服务器的更新请求为C1,终端设备B2发送给服务器的更新请求为C2,以此类推;上述标识信息也可以为服务器收到不同终端设备的更新请求时的时间信息。
通过上述步骤S202可以得到用于更新热点记录的具有不同标识信息的更新请求,由于不同的更新请求具有不同的标识信息,因而可以快速区分出不同的更新请求,进一步可以确定更新请求的优先级,从而加快处理任务的速度。
步骤S204,使用第一处理进程执行当前更新数据库记录的当前更新请求,得到更新结果,其中,在第一处理进程执行当前更新请求的过程中,下一个更新请求处于等待状态。
在上述步骤S204中,上述第一处理进程可以通过对收集当前更新请求以及对内存进行更新处理,并且上述第一处理进程可以包括主线程和从线程。上述第一处理进程可以为空,也可以不为空,其中,在上述第一处理进程为空的情况下,此时第一处理进程中不存在需要处理的事务,因此第一处理进程将触发本次连接作为主线程来执行当前更新请求;在上述第一处理进程不为空的情况下,此时第一处理进程中存在正在处理的事务,因此,第一处理进程将触发本次连接作为从线程来执行当前更新请求。
此处需要说明的是,主线程用于查找当前需要更新的热点记录,并对该热点记录进行加锁处理,然后根据需要更新的热点记录对内存进行更新处理;主线程还用于收集从线程发送的更新结果,并根据该更新结果更新存储引擎中的记录。从线程用于查找主线程已处理过的热点记录的内容,并对内存进行更新处理,然后将更新后的结果发送给主线程,由主线程收集。
在一种可选的实施例中,用户A1买了1台如图3所示的“XXX笔记本电脑”,用户A2买了2台“XXX笔记本电脑”。两个用户的终端设备分别向服务器发送更新请求,并且更新请求中的标识信息为时间信息,在服务器最早收到用户A1的更新请求的情况下,优先执行该更新请求,则用户A2的更新请求处于等待状态。由于服务器有线执行用户A1的终端设备发起的更新请求,所以此时服务器更新内存中的“数量”45为44。
需要说明的是,在执行上述步骤S204之前需要对数据库中的更新记录进行加锁处理,可以防止其他进行对该记录进行更改,进而提高了系统运行的稳定性。
步骤S206,使用第二处理进程提交更新结果,其中,如果第二处理进程开始提交更新结果,触发第一处理进程执行下一个更新请求。优选地,在使用第二处理进程提交更新结果之前,可以执行将第一处理进程切换为第二处理进程的步骤,在完成切换的处理之后使用第二处理进程来提交更新结果。
执行完步骤S204之后可以得到更新结果,服务器得到该更新结果后在第二处理进程中,对内存进行更新处理,在一种可选的实施例中,服务器将内存中的“数量”由“45”更新为“44”,并将“44”通过执行更新语句对内存中的数据进行更新,即将内存中“数量”变更为“44”。之后,根据第一处理进程对用户A2发起的更新请求进行处理。
需要说明的是,上述第二处理进程可用于存储引擎更新以及提交更新结果,同样上述第二处理进程可以包括主线程和从线程。其中,在第一处理进程和第二处理进程中都包含主线程和至少一个从线程。
通过上述步骤S206可知,当第一处理进程在收集当前更新请求以及对内存进行更新处理时,同时第二处理进程可以执行提交上一个更新请求的更新结果,在提交更新结果之后,并退出第二处理进行,两个处理进程互不阻塞,从而提高了更新请求的吞吐量。
此处需要说明的是,本发明将由一个处理进程来完成收集更新请求、更新内存以及提交更新结果的整个业务流程进行改进,针对执行过程中的不同的阶段提供不同的处理进程来进行处理,即采用第一处理进程来执行内存更新的事务,而采用另一个处理进程,即第二处理进程来处理提交更新结果的事务,由于第二处理进程执行提交的事务并不影响下一个更新请求进行收集和更新内存的事务,因此,可以在第一处理进程完成更新内存和事务,切换为第二处理进行执行提交更新结果的事务时,由第一处理进程对下一个更新请求进行相应的处理。另外,第二处理进程所执行的提交事务可以包括将当前更新内存的更新结果写入对应的服务器的磁盘,以及将更新结果返回给前端客户端。
基于上述步骤S202至步骤S206所公开的方案中,可以获知通过获取用于更新数据库记录的至少一个更新请求,然后使用第一处理进程执行当前更新数据库记录的当前更新请求,得到更新结果,最后使用第二处理进程提交更新结果,容易注意到的是,当第一处理进程在收集当前更新请求以及对内存进行更新处理时,第二处理进程同时提交更新结果,两个处理进程互不阻塞,从而提高了更新请求的吞吐量,达到了提升热点记录更新性能的目的,从而实现了提高热点记录更新速度的技术效果,进而解决了数据库中单一热点记录行锁的互斥形成全局串行点的技术问题。
现有技术的实现中,因为热点行锁的互斥性,第一处理进程的读取记录并加锁步骤,和第二处理进程的提交步骤是互斥的,因此第一处理进程和第二处理进程之间相互阻塞,不能并发执行。
本发明使用了一种锁继承方法,当系统发现2个处理进程属于同一个执行单元的时候,第二处理进程可以把自己持有的热点行锁交给第一处理进程,这样第一处理进程可以在第二处理进程未提交前就执行读取记录并加锁步骤,实现第一处理进程和第二处理进程之间的并发执行。
图4示出了任务的处理方法流程图,在图4中虚线框代表线程(如图4中的主线程和从线程),加粗事先框代表进行(如图4中的第一处理进程和第二处理进程),其中,在使用第一处理进程执行当前更新热点记录的更新请求,得到更新结果之前,需要执行以下步骤:
步骤S402,判断当前更新请求是否满足前置条件,其中,前置条件用于确定当前更新请求是否用于读写热点记录。
在一种可选的实施例中,服务器对接收到的当前更新请求进行解析处理,通过解析可以得到更新请求中的标识信息以及操作信息,其中,操作信息可以为插入、删除、查询以及更新等操作,操作信息在不同的数据库语言中有不同的执行语句,例如在MySQL中,INSERT语句对数据库执行插入操作,DELETE语句对数据库执行删除操作,SELECT语句对数据库执行查询操作,以及UPDATE语句对数据库进行更新操作。根据操作信息来判断当前的更新请求是否满足前置条件,例如,当检测到操作信息包含“UPDATE”时,当前更新请求满足前置条件,此时,执行步骤S404;而当检测到操作信息包含“SELECT”时,当前更新请求不满足前置条件,则直接对数据库进行相关操作。
步骤S404,如果当前更新请求满足前置条件,获取当前更新请求中携带的任务标识信息。
在一种可选的实施例中,当检测到操作信息包含“UPDATE”时,当前更新请求满足前置条件,此时,提取UPDATE语句中WHERE条件中的主键值或唯一键值作为唯一标识,该唯一标识即为上述标识信息。例如,MySQL中的UPDATE语句为:
{update Table1set num=44where uid=12;}
其中,num表示数量,Table1表示MySQL数据库中的一张表,uid为上述标识信息,12代表图3中的“XXX笔记本电脑”在该表中的标识信息。执行上述UPDATE语句,可将Table1中的电脑的数量更新为44。
步骤S406,根据当前更新请求中携带的任务标识信息查找得到对应的执行单元,其中,执行单元包括第一处理进程和第二处理进程,同一个热点记录的更新请求都通过执行单元来执行。
在上述步骤S406中,可以通过上述标识信息在哈希表中动态地查找得到对应的执行单元,在不存在上述执行单元的情况下,可以创建执行单元。其中,同一个热点记录的更新请求属于同一个执行单元,并且每个指令单元包括第一处理进程和第二处理进程,第一处理进程可用于收集更新请求信息以及更新内存,而第二处理进程可用于更新存储引擎以及提交更新结果。
需要说明的是,在数据记录为热点记录的情况下,第一处理进程和第二处理进程分别包括主线程,其中,主线程用于执行首次达到的用于更新热点记录的更新请求以及加锁期间内更新相同的热点记录的更新请求。例如,更新请求C1请求对热点记录D1进行更新,并且首次到达热点记录D1的是更新请求C1,其次到达的是更新请求C2,则执行更新请求C1的线程为主线程。
此外,第一处理进程和第二处理进程分别还包括:至少一个从线程,其中,从线程用于执行加锁期间内除首次到达的更新请求之外的更新请求。在一种可选的实施例中,更新请求C1请求对热点记录D1进行更新,并且首次到达热点记录D1的是更新请求C1,其次到达的是更新请求C2,则执行更新请求C1的线程为主线程,而执行更新请求C2的为从线程。其中,第一处理进程与第二处理进程之间可以切换,并且在每种进程中的两种线程可以并发执行。
需要说明的是,上述从线程的个数为至少一个,也可以为0个,在一种优选的实施例中,如果从线程的个数为0,则在处理任务的整个过程中,第一处理进程和第二处理进程都只包含主进程,即此时的任务处理方法与现有技术中对任务的处理方法相同。由于在从线程个数为0的情况下,本申请对热点记录更新的吞吐量与现有技术相同,当从线程的个数至少为一个时,本申请更新热点记录的吞吐量将大于现有技术更新热点记录的吞吐量。由此可见,本申请所提出的任务的处理方法可以提高热点记录的更新速度,提升热点记录的更新性能。
如图4所示,在第一处理进程的当前处理内容为空的情况下,使用主线程执行当前更新请求,其中,使用第一处理进程执行当前更新热点记录的当前更新请求,得到更新结果,上述方法具体包括如下步骤:
步骤S408,主线程根据当前更新请求的标识信息,查询得到热点记录的内容,并对热点记录加锁;
步骤S410,判断内容是否符合当前更新请求所确定的查询条件;
步骤S412,如果符合,则在内存中更新热点记录的内容,得到第一更新结果;
步骤S414,如果不符合,则直接释放第一处理进程。
在上述步骤S408至步骤S414中,如果第一处理进程的当前处理内容为空,说明在此之前没有更新请求,当前的更新请求在主线程中执行。根据当前跟新请求的标识信息从存储引擎中查询热点记录,并对该热点记录进行加锁处理,例如,可以使用MySQL数据库中的INNODB语句对该热点记录完成加锁处理,也可以使用MYISAM语句锁定整张表。然后检测热点记录是否符合WHERE中的其他条件,
由图4可知,在内存中更新热点记录的内容,得到第一更新结果之后,任务的处理方法还包括如下步骤:
步骤S416,收集预定时间段内至少一个从线程的第二更新结果,其中,主线程在预定时间段内处于挂起状态;
步骤S418,根据第一更新结果和收集到的至少一个第二更新结果,更新存储引擎的记录;
步骤S420,将第一处理进程的主线程切换至第二处理进程的主线程。
在上述步骤S416至步骤S420中,在预定时间内,主线程处于挂起状态,在该时间段内,收集从线程中的更新记录,并得到第二更新结果,根据第一更新结果和第二更新结果,按照当前更新记录的内存对存储引擎进行更新操作,并检测第一处理进程的主线程是否满足切换到第二处理进程的主线程的切换条件,在满足上述切换条件的情况下,第一处理进程的主线程切换至第二处理进程的主线程。其中,上述切换条件为在第一处理进程中完成对存储引擎的更新。
需要说明的是,在主线程持有锁期间,主线程进行一定时间的挂起以及收集第二更新结果,在这段时间内如果有相同热点记录的更新请求到达,则该更新请求作为从线程将更新操作委托给主线程执行(即更新存储引擎),上述突破了传统方案中在一个加锁周期内只能执行一次业务更新的限制,提高了更新热点记录的吞吐量。
如图4所示,在主线程和至少一个从线程更新完成热点记录之后,启动第二处理进程,其中,使用第二处理进程提交更新结果,上述方法包括如下步骤:
步骤S422,启动第二处理进程中的主线程按照更新热点记录的更新结果执行提交流程;
步骤S424,退出第一处理进程,并释放第一处理进程。
在上述步骤S422至步骤S424中,当第二处理进程中的主线程执行完第一处理进程中的全部步骤之后,便到达了提交节点,并进入提交流程。然后根据对更新记录的更新顺序完成所有的提交步骤,最后退出第一处理进程,当该进程退出完成后,释放第一处理进程,并通知第一处理进程可和第二处理进程进行互相切换。
在第一处理进程的当前处理内容不为空的情况下,使用从线程执行当前更新请求,其中,如图4所示,使用第一处理进程执行当前更新热点记录的当前更新请求,得到更新结果的方法还包括如下步骤:
步骤S426,从线程读取主线程已经处理过的热点记录的内容;
步骤S428,判断主线程已经处理过的热点记录的内容是否符合当前更新请求所确定的查询条件;
步骤S430,如果符合,则在内存中更新热点记录的内容,得到第二更新结果;
步骤S432,如果不符合,则直接释放第一处理进程。
在上述步骤S426至步骤S432中,当主线程处于步骤S416,也就是收集状态时,从线程可以获取到主线程所有处理过的热点记录的内容,并判断主线程已经处理过的热点记录的内容是否符合当前更新请求所确定的查询条件,例如,该更新请求的时间是否在允许的时间内或者该更新请求的数量是否超过预定值,如果不符合上述要求,则执行步骤S432,否则执行步骤S430,在内存中对热点记录进行更新,并得到第一更新结果。
如图4所示,在主线程和至少一个从线程更新完成热点记录之后,启动第二处理进程,其中,使用第二处理进程提交更新结果的方法包括如下步骤:
步骤S434,第二处理进程中的主线程完成提交流程;
步骤S436,退出第二处理进程,并释放第二处理进程。
在上述步骤S434至步骤S436中,当第一处理进程在收集更新记录并执行存储更新时,第二处理进程同时执行提交更新,由于第一处理进程与第二处理进程互不阻塞,从而提高了更新记录的吞吐量。
需要说明的是,在进行第一处理进程和第二处理进程的过程中,在执行任何一个处理了进程时,整个执行单元不会被释放。上述处理过程可使得当高于频率F的某一条热点记录更新请求获取执行单元后,可以长时间持有该执行单元,从而可以实现热点记录的常驻哈希表;而低于频率F的热点记录更新请求在执行完之后会释放执行单元,而不会长期持有该执行单元,从而可以实现热点记录的自动识别,使得热点记录的更新不会对非热点记录的更新造成影响。其中,F=1/Tc,Tc为可配置的第一处理进程收集的等待时间。
可选的,在第二处理进程提交更新结果的过程中,第二处理进程中的主线程从第二处理进程中的主线程中继承用于锁定数据库记录的锁,并读取未提交的更新请求。
普通的关系型数据库行锁,在UPDATE中加X锁。在一个UPDATE提交(释放行锁)之前,其他UPDATE是无法加锁或更新的。但通过上述方法可以识别到当同一个执行单元的第二处理进程正在提交时,允许第一处理进程的主线程从第二处理进程的主线程中继承热点行锁,并读到还未提交的更新。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例的方法。
实施例2
根据本发明实施例,还提供了一种用于实施上述任务的处理装置,如图5所示,该装置包括:获取模块501、执行模块503和提交模块505。
获取模块501,用于获取用于更新数据库记录的至少一个更新请求,其中,每个更新请求包括了不同任务的标识信息。
在上述获取模块501中,上述热点记录可以为在一个特定的时间段内,更新次数超过预定阈值的记录,例如,如果5s内记录更新的次数超过500次,则该条记录即为热点记录。上述更新请求可用于指示数据库中相应的记录进行更新。图3示出了购买热卖电脑“XXX笔记本电脑”时的显示界面,作为一种可选的实施例,当用户A1在终端设备B1上购买该电脑时,用户A1点击图3中的“+”按钮,选择需要购买电脑的数量,当用户A1点击了“立即购买”按钮后,终端设备B1会产生购买消息,并将该购买消息发送给服务器,服务器根据该购买消息更新数据库。其中,上述购买消息即为更新请求,上述任务为对该记录中的电脑数量进行更新操作。
根据本申请另一个实施例,作为新的更新请求,会进入服务器的更新请求队列,服务器依次读取队列中的内容。
需要说明的是,每个更新请求具有不同的标识信息,上述标识信息可用于区分出不同的更新请求,可以通过提取数据库语句(例如,SQL语句、MySQL语句)中WHERE条件中的主键值或唯一键值,并将提取出的主键值或唯一键值作为标志信息,其中,主键值或唯一键值可以为终端设备的名称或IP地址,例如,终端设备B1发送给服务器的更新请求为C1,终端设备B2发送给服务器的更新请求为C2,以此类推;上述标识信息也可以为服务器收到不同终端设备的更新请求时的时间信息。
通过上述获取模块501可以得到用于更新数据库记录的具有不同标识信息的更新请求,由于不同的更新请求具有不同的标识信息,因而可以快速区分出不同的更新请求,进一步可以确定更新请求的优先级,从而加快处理任务的速度。
执行模块503,用于使用第一处理进程执行当前更新数据库记录的当前更新请求,得到更新结果,其中,在第一处理进程执行当前更新请求的过程中,下一个更新请求处于等待状态。
在上述执行模块503中,上述第一处理进程可以通过对收集当前更新请求以及对内存进行更新处理,并且上述第一处理进程可以包括主线程和从线程。上述第一处理进程可以为空,也可以不为空,其中,在上述第一处理进程为空的情况下,此时第一处理进程中不存在需要处理的事务,因此第一处理进程将触发本次连接作为主线程来执行当前更新请求;在上述第一处理进程不为空的情况下,此时第一处理进程中存在正在处理的事务,因此,第一处理进程将触发本次连接作为从线程来执行当前更新请求。
在一种可选的实施例中,用户A1买了1台如图3所示的“XXX笔记本电脑”,用户A2买了2台“XXX笔记本电脑”。两个用户的终端设备分别向服务器发送更新请求,并且更新请求中的标识信息为时间信息,在服务器最早收到用户A1的更新请求的情况下,优先执行该更新请求,则用户A2的更新请求处于等待状态。由于服务器有线执行用户A1的终端设备发起的更新请求,所以此时服务器更新内存中的“数量”45为44。
需要说明的是,在执行模块503中执行实施例1中的步骤S204之前需要对数据库中的更新记录进行加锁处理,可以防止其他进行对该记录进行更改,进而提高了系统运行的稳定性。
提交模块505,用于使用第二处理进程提交更新结果,其中,如果第二处理进程开始提交更新结果,触发第一处理进程执行下一个更新请求。优选地,在使用第二处理进程提交更新结果之前,可以执行将第一处理进程切换为第二处理进程的步骤,在完成切换的处理之后使用第二处理进程来提交更新结果。
通过执行模块503可以得到更新结果,服务器得到该更新结果后在第二处理进程中,对内存进行更新处理,。在一种可选的实施例中,服务器将内存中的“数量”由“45”更新为“44”,并将“44”通过执行更新语句对内存中的数据进行更新,即将内存中“数量”变更为“44”。之后,根据第一处理进程对用户A2发起的更新请求进行处理。
在另一种可选的实施例中,将第一处理进程切换为第二处理进程,使用第二处理进程来提交更新结果。
需要说明的是,上述第二处理进程可用于存储引擎更新以及提交更新结果,同样上述第二处理进程可以包括主线程和从线程。其中,在第一处理进程和第二处理进程中都包含主线程和若干个从线程。
通过上述提交模块505可知,当第一处理进程在收集当前更新请求以及对内存进行更新处理时,同时第二处理进程可以执行提交上一个更新请求的更新结果,在提交更新结果之后,并退出第二处理进行,两个处理进程互不阻塞,从而提高了更新请求的吞吐量。
此处需要说明的是,本发明将由一个处理进程来完成收集更新请求、更新内存以及提交更新结果的整个业务流程进行改进,针对执行过程中的不同的阶段提供不同的处理进程来进行处理,即采用第一处理进程来执行内存更新的事务,而采用另一个处理进程,即第二处理进程来处理提交更新结果的事务,由于第二处理进程执行提交的事务并不影响下一个更新请求进行收集和更新内存的事务,因此,可以在第一处理进程完成更新内存和事务,切换为第二处理进行执行提交更新结果的事务时,由第一处理进程对下一个更新请求进行相应的处理。另外,第二处理进程所执行的提交事务可以包括将当前更新内存的更新结果写入对应的服务器的磁盘,以及将更新结果返回给前端客户端。
此处需要说明的是,上述获取模块501、执行模块503和提交模块505对应于实施例1中的步骤S202至步骤S206,三个模块与对应的步骤所实现的实例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例一提供的计算机终端10中。
由上可知,通过获取用于更新数据库记录的至少一个更新请求,然后使用第一处理进程执行当前更新数据库记录的当前更新请求,得到更新结果,最后使用第二处理进程提交更新结果,容易注意到的是,当第一处理进程在收集当前更新请求以及对内存进行更新处理时,第二处理进程同时提交更新结果,两个处理进程互不阻塞,从而提高了更新请求的吞吐量,达到了提升热点记录更新性能的目的,从而实现了提高热点记录更新速度的技术效果,进而解决了数据库中单一热点记录行锁的互斥形成全局串行点的技术问题。
现有技术的实现中,因为热点行锁的互斥性,第一处理进程的读取记录并加锁步骤,和第二处理进程的提交步骤是互斥的,因此第一处理进程和第二处理进程之间相互阻塞,不能并发执行。
本发明使用了一种锁继承方法,当系统发现2个处理进程属于同一个执行单元的时候,第二处理进程可以把自己持有的热点行锁交给第一处理进程,这样第一处理进程可以在第二处理进程未提交前就执行读取记录并加锁步骤,实现第一处理进程和第二处理进程之间的并发执行。
可选的,任务的处理装置还包括:第一判断模块507、标识获取模块509和查找模块511。
第一判断模块507,用于判断当前更新请求是否满足前置条件,其中,前置条件用于确定当前更新请求是否用于读写热点记录。
在一种可选的实施例中,服务器对接收到的当前更新请求进行解析处理,通过解析可以得到更新请求中的标识信息以及操作信息,其中,操作信息可以为插入、删除、查询以及更新等操作,操作信息在不同的数据库语言中有不同的执行语句,例如在MySQL中,INSERT语句对数据库执行插入操作,DELETE语句对数据库执行删除操作,SELECT语句对数据库执行查询操作,以及UPDATE语句对数据库进行更新操作。根据操作信息来判断当前的更新请求是否满足前置条件,例如,当检测到操作信息包含“UPDATE”时,当前更新请求满足前置条件,此时,执行步骤S404;而当检测到操作信息包含“SELECT”时,当前更新请求不满足前置条件,则直接对数据库进行相关操作。
标识获取模块509,用于如果当前更新请求满足前置条件,获取当前更新请求中携带的任务标识信息。
在一种可选的实施例中,当检测到操作信息包含“UPDATE”时,当前更新请求满足前置条件,此时,提取UPDATE语句中WHERE条件中的主键值或唯一键值作为唯一标识,该唯一标识即为上述标识信息。例如,MySQL中的UPDATE语句为:
{update Table1set num=44where uid=12;}
其中,num表示数量,Table1表示MySQL数据库中的一张表,uid为上述标识信息,12代表图3中的“XXX笔记本电脑”在该表中的标识信息。执行上述UPDATE语句,可将Table1中的电脑的数量更新为44。
查找模块511,用于根据当前更新请求中携带的任务标识信息查找得到对应的执行单元,其中,执行单元包括第一处理进程和第二处理进程,同一个热点记录的更新请求都通过执行单元来执行。
在上述查找模块511中,可以通过上述标识信息在哈希表中动态地查找得到对应的执行单元,在不存在上述执行单元的情况下,可以创建执行单元。其中,同一个热点记录的更新请求属于同一个执行单元,并且每个指令单元包括第一处理进程和第二处理进程,第一处理进程可用于收集更新请求信息以及更新内存,而第二处理进程可用于更新存储引擎以及提交更新结果。
需要说明的是,在数据记录为热点记录的情况下,第一处理进程和第二处理进程分别包括主线程,其中,主线程用于执行首次达到的用于更新热点记录的更新请求以及加锁期间内更新相同的热点记录的更新请求。例如,更新请求C1请求对热点记录D1进行更新,并且首次到达热点记录D1的是更新请求C1,其次到达的是更新请求C2,则执行更新请求C1的线程为主线程。
此外,第一处理进程和第二处理进程分别还包括:至少一个从线程,其中,从线程用于执行加锁期间内除首次到达的更新请求之外的更新请求。在一种可选的实施例中,更新请求C1请求对热点记录D1进行更新,并且首次到达热点记录D1的是更新请求C1,其次到达的是更新请求C2,则执行更新请求C1的线程为主线程,而执行更新请求C2的为从线程。其中,第一处理进程与第二处理进程之间可以切换,并且在每种进程中的两种线程可以并发执行。
需要说明的是,上述从线程的个数为至少一个,也可以为0个,在一种优选的实施例中,如果从线程的个数为0,则在处理任务的整个过程中,第一处理进程和第二处理进程都只包含主进程,即此时的任务处理方法与现有技术中对任务的处理方法相同。由于在从线程个数为0的情况下,本申请对热点记录更新的吞吐量与现有技术相同,当从线程的个数至少为一个时,本申请更新热点记录的吞吐量将大于现有技术更新热点记录的吞吐量。由此可见,本申请所提出的任务的处理方法可以提高热点记录的更新速度,提升热点记录的更新性能。
需要说明的是,第一处理进程和第二处理进程分别包括:主线程和至少一个从线程,其中,主线程用于执行首次到达的用于更新热点记录的更新请求以及加锁期间内更新相同的热点记录的更新请求,从线程用于执行加锁期间内除首次到达的更新请求之外的更新请求。例如,更新请求C1请求对热点记录D1进行更新,并且首次到达热点记录D1的是更新请求C1,其次到达的是更新请求C2,则执行更新请求C1的线程为主线程,而执行更新请求C2的为从线程。其中,第一处理进程与第二处理进程之间可以切换,并且在每种进程中的两种线程可以并发执行。
此处还需要说明的是,上述第一判断模块507、标识获取模块509和查找模块511对应于实施例1中的步骤S402至步骤S406,三个模块与对应的步骤所实现的实例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例一提供的计算机终端10中。
可选的,在第一处理进程的当前处理内容为空的情况下,使用主线程执行当前更新请求,其中,执行模块503包括:加锁模块5031、第二判断模块5033、第一更新模块5035和第一释放模块5037。其中,加锁模块5031,用于主线程根据当前更新请求的标识信息,查询得到热点记录的内容,并对热点记录加锁;第二判断模块5033,用于判断内容是否符合当前更新请求所确定的查询条件;第一更新模块5035,用于如果符合,则在内存中更新热点记录的内容,得到第一更新结果;第一释放模块5037,用于如果不符合,则直接释放第一处理进程。
在一种可选的实施例中,如果第一处理进程的当前处理内容为空,说明在此之前没有更新请求,当前的更新请求在主线程中执行。根据当前跟新请求的标识信息从存储引擎中查询热点记录,并对该热点记录进行加锁处理,例如,可以使用MySQL数据库中的INNODB语句对该热点记录完成加锁处理,也可以使用MYISAM语句锁定整张表。然后检测热点记录是否符合WHERE中的其他条件,例如,该更新请求的时间是否在允许的时间内或者该更新请求的数量是否超过预定值,如果不符合上述要求,则执行第一释放模块5037,释放第一处理进程,否则执行第一更新模块5035,在内存中对热点记录进行更新,并得到第一更新结果。
此处需要说明的是,上述加锁模块5031、第二判断模块5033、第一更新模块5035和第一释放模块5037对应于实施例1中的步骤S408至步骤S414,四个模块与对应的步骤所实现的实例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例一提供的计算机终端10中。
可选的,上述执行模块503还包括:收集模块5039、记录更新模块50311和切换模块50313。其中,收集模块5039,用于收集预定时间段内至少一个从线程的第二更新结果,其中,主线程在预定时间段内处于挂起状态;记录更新模块50311,用于根据第一更新结果和收集到的至少一个第二更新结果,更新存储引擎的记录;切换模块50313,用于将第一处理进程的主线程切换至第二处理进程的主线程。
在一种可选的实施例中,在预定时间内,主线程处于挂起状态,在该时间段内,收集从线程中的更新记录,并得到第二更新结果,根据第一更新结果和第二更新结果,按照当前更新记录的内存对存储引擎进行更新操作,并检测第一处理进程的主线程是否满足切换到第二处理进程的主线程的切换条件,在满足上述切换条件的情况下,第一处理进程的主线程切换至第二处理进程的主线程。其中,上述切换条件为在第一处理进程中完成对存储引擎的更新。
需要说明的是,在主线程持有锁期间,主线程进行一定时间的挂起以及收集第二更新结果,在这段时间内如果有相同热点记录的更新请求到达,则该更新请求作为从线程将更新操作委托给主线程执行(即更新存储引擎),上述突破了传统方案中在一个加锁周期内只能执行一次业务更新的限制,提高了更新热点记录的吞吐量。
此处还需要说明的是,上述收集模块5039、记录更新模块50311和切换模块50313对应于实施例1中的步骤S416至步骤S420,三个模块与对应的步骤所实现的实例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例一提供的计算机终端10中。
可选的,在主线程和至少一个从线程更新完成热点记录之后,启动第二处理进程,其中,提交模块505包括:第一提交模块5051和第一退出模块5053。其中,第一提交模块5051,用于启动第二处理进程中的主线程按照更新热点记录的更新结果执行提交流程;第一退出模块5053,用于退出第一处理进程,并释放第一处理进程。
由上可知,当第二处理进程中的主线程执行完第一处理进程中的全部步骤之后,便到达了提交节点,并进入提交流程。然后根据对更新记录的更新顺序完成所有的提交步骤,最后退出第二处理进程,当该进程退出完成后,释放第二处理进程,并通知第一处理进程可进行与第二处理进程的相互切换。
此处还需要说明的是,上述第一提交模块5051和第一退出模块5053对应于实施例1中的步骤S422至步骤S424,两个模块与对应的步骤所实现的实例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例一提供的计算机终端10中。
可选的,在第一处理进程的当前处理内容不为空的情况下,使用从线程执行当前更新请求,其中,执行模块503包括:读取模块、第三判断模块、第二更新模块和第二释放模块。其中,读取模块,用于从线程读取主线程已经处理过的热点记录的内容;第三判断模块,用于判断主线程已经处理过的热点记录的内容是否符合当前更新请求所确定的查询条件;第二更新模块,用于如果符合,则在内存中更新热点记录的内容,得到第二更新结果;第二释放模块,用于如果不符合,则直接释放第一处理进程。
由上可知,当主线程处于步骤S416,也就是收集状态时,从线程可以获取到主线程所有处理过的热点记录的内容,并判断主线程已经处理过的热点记录的内容是否符合当前更新请求所确定的查询条件,例如,该更新请求的时间是否在允许的时间内或者该更新请求的数量是否超过预定值,如果不符合上述要求,则执行第二释放模块,直接释放第一处理进程,否则执行第二更新模块,在内存中对热点记录进行更新,并得到第二更新结果。
此处还需要说明的是,上述读取模块、第三判断模块、第二更新模块和第二释放模块对应于实施例1中的步骤S426至步骤S432,四个模块与对应的步骤所实现的实例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例一提供的计算机终端10中。
可选的,在主线程和至少一个从线程更新完成热点记录之后,启动第二处理进程,其中,提交模块505还包括:第二提交模块5055和第二退出模块5057。其中,第二提交模块5055,用于第二处理进程中的主线程完成提交流程;第二退出模块5057,用于退出第二处理进程,并释放第二处理进程。
由上可知,当第一处理进程在收集更新记录并执行存储更新时,第二处理进程同时执行提交更新,由于第一处理进程与第二处理进程互不阻塞,从而提高了更新记录的吞吐量。
需要说明的是,在进行第一处理进程和第二处理进程的过程中,在执行任何一个处理了进程时,整个执行单元不会被释放。上述处理过程可使得当高于频率F的某一条热点记录更新请求获取执行单元后,可以长时间持有该执行单元,从而可以实现热点记录的常驻哈希表;而低于频率F的热点记录更新请求在执行完之后会释放执行单元,而不会长期持有该执行单元,从而可以实现热点记录的自动识别,使得热点记录的更新不会对非热点记录的更新造成影响。其中,F=1/Tc,Tc为可配置的第一处理进程收集的等待时间。
此处还需要说明的是,上述第二提交模块5055和第二退出模块5057对应于实施例1中的步骤S434至步骤S436,两个模块与对应的步骤所实现的实例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例一提供的计算机终端10中。
可选的,在第二处理进程提交更新结果的过程中,第二处理进程中的主线程从第二处理进程中的主线程中继承用于锁定数据库记录的锁,并读取未提交的更新请求。
普通的关系型数据库行锁,在UPDATE中加X锁。在一个UPDATE提交(释放行锁)之前,其他UPDATE是无法加锁或更新的。但通过上述方法可以识别到当同一个执行单元的第二处理进程正在提交时,允许第一处理进程的主线程从第二处理进程的主线程中继承热点行锁,并读到还未提交的更新。
实施例3
本发明的实施例可以提供一种计算机终端,该计算机终端可以是计算机终端群中的任意一个计算机终端设备。可选地,在本实施例中,上述计算机终端也可以替换为移动终端等终端设备。
可选地,在本实施例中,上述计算机终端可以位于计算机网络的多个网络设备中的至少一个网络设备。
在本实施例中,上述计算机终端可以执行应用程序的任务的处理方法中以下步骤的程序代码:获取用于更新数据库记录的至少一个更新请求,其中,每个更新请求包括了不同任务的标识信息;使用第一处理进程执行当前更新数据库记录的当前更新请求,得到更新结果,其中,在第一处理进程执行当前更新请求的过程中,下一个更新请求处于等待状态;使用第二处理进程提交更新结果,其中,如果第二处理进程开始提交更新结果,触发第一处理进程执行下一个更新请求。
可选地,图6是根据本发明实施例的一种计算机终端的结构示意图。如图6所示,该计算机终端10可以包括:一个或多个(图中仅示出一个)处理器601以及存储器603。
其中,存储器603可用于存储软件程序以及模块,如本发明实施例中的安全漏洞检测方法和装置对应的程序指令/模块,处理器通过运行存储在存储器内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的系统漏洞攻击的检测方法。存储器可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器可进一步包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至终端10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
处理器601可以通过传输装置调用存储器存储的信息及应用程序,以执行下述步骤:判断当前更新请求是否满足前置条件,其中,前置条件用于确定当前更新请求是否用于读写热点记录;如果当前更新请求满足前置条件,获取当前更新请求中携带的任务标识信息;根据当前更新请求中携带的任务标识信息查找得到对应的执行单元,其中,执行单元包括第一处理进程和第二处理进程,同一个热点记录的更新请求都通过执行单元来执行。
可选的,上述处理器601还可以执行如下步骤的程序代码:主线程根据当前更新请求的标识信息,查询得到热点记录的内容,并对热点记录加锁;判断内容是否符合当前更新请求所确定的查询条件;如果符合,则在内存中更新热点记录的内容,得到第一更新结果;如果不符合,则直接释放第一处理进程。。
可选的,上述处理器601还可以执行如下步骤的程序代码:收集预定时间段内至少一个从线程的第二更新结果,其中,主线程在预定时间段内处于挂起状态;根据第一更新结果和收集到的至少一个第二更新结果,更新存储引擎的记录;将第一处理进程的主线程切换至第二处理进程的主线程。
可选的,上述处理器601还可以执行如下步骤的程序代码:启动第二处理进程中的主线程按照更新热点记录的更新结果执行提交流程;退出第一处理进程,并释放第一处理进程。
可选的,上述处理器601还可以执行如下步骤的程序代码:从线程读取主线程已经处理过的热点记录的内容;判断主线程已经处理过的热点记录的内容是否符合当前更新请求所确定的查询条件;如果符合,则在内存中更新热点记录的内容,得到第二更新结果;如果不符合,则直接释放第一处理进程。
可选的,上述处理器601还可以执行如下步骤的程序代码:第二处理进程中的主线程完成提交流程;退出第二处理进程,并释放第二处理进程。
可选的,上述处理器601还可以执行如下步骤的程序代码:在第二处理进程提交更新结果的过程中,第二处理进程中的主线程从第二处理进程中的主线程中继承用于锁定热点记录的锁,并读取未提交的更新请求。
采用本发明实施例,提供了一种代理更新和动态队列的方案。通过获取用于更新数据库记录的至少一个更新请求,然后使用第一处理进程执行当前更新数据库记录的当前更新请求,得到更新结果,最后使用第二处理进行提交更新结果,从而达到了提升热点记录更新性能的目的,进而解决了数据库中单一热点记录行锁的互斥形成全局串行点的技术问题。
本领域普通技术人员可以理解,图6所示的结构仅为示意,计算机终端也可以是智能手机(如Android手机、iOS手机等)、平板电脑、掌声电脑以及移动互联网设备(MobileInternet Devices,MID)、PAD等终端设备。图6其并不对上述电子装置的结构造成限定。例如,计算机终端10还可包括比图6中所示更多或者更少的组件(如网络接口、显示装置等),或者具有与图6所示不同的配置。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(RandomAccess Memory,RAM)、磁盘或光盘等。
实施例4
本发明的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于保存上述实施例一所提供的任务的处理方法所执行的程序代码。
可选地,在本实施例中,上述存储介质可以位于计算机网络中计算机终端群中的任意一个计算机终端中,或者位于移动终端群中的任意一个移动终端中。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:判断当前更新请求是否满足前置条件,其中,前置条件用于确定当前更新请求是否用于读写热点记录;如果当前更新请求满足前置条件,获取当前更新请求中携带的任务标识信息;根据当前更新请求中携带的任务标识信息查找得到对应的执行单元,其中,执行单元包括第一处理进程和第二处理进程,同一个热点记录的更新请求都通过执行单元来执行。
可选的,上述存储介质还用于执行以下步骤的程序代码:主线程根据当前更新请求的标识信息,查询得到热点记录的内容,并对热点记录加锁;判断内容是否符合当前更新请求所确定的查询条件;如果符合,则在内存中更新热点记录的内容,得到第一更新结果;如果不符合,则直接释放第一处理进程。
可选的,上述存储介质还用于执行以下步骤的程序代码:收集预定时间段内至少一个从线程的第二更新结果,其中,主线程在预定时间段内处于挂起状态;根据第一更新结果和收集到的至少一个第二更新结果,更新存储引擎的记录;将第一处理进程的主线程切换至第二处理进程的主线程。
可选的,上述存储介质还用于执行以下步骤的程序代码:启动第二处理进程中的主线程按照更新热点记录的更新结果执行提交流程;退出第一处理进程,并释放第一处理进程。
可选的,上述存储介质还用于执行以下步骤的程序代码:从线程读取主线程已经处理过的热点记录的内容;判断主线程已经处理过的热点记录的内容是否符合当前更新请求所确定的查询条件;如果符合,则在内存中更新热点记录的内容,得到第二更新结果;如果不符合,则直接释放第一处理进程。
可选的,上述存储介质还用于执行以下步骤的程序代码:第二处理进程中的主线程完成提交流程;退出第二处理进程,并释放第二处理进程。
可选的,上述存储介质还用于执行以下步骤的程序代码:在第二处理进程提交更新结果的过程中,第二处理进程中的主线程从第二处理进程中的主线程中继承用于锁定热点记录的锁,并读取未提交的更新请求。
实施例5
根据本发明实施例,还提供了一种用于实施上述基于数据库的任务处理方法,如图7所示,该方法包括如下步骤:
步骤S702,获取至少一个更新请求,其中,每个更新请求包括了不同任务的标识信息。
在上述步骤S702中,上述更新请求用于更新热点记录。上述热点记录可以为在一个特定的时间段内,更新次数超过预定阈值的记录,例如,如果5s内记录更新的次数超过500次,则该条记录即为热点记录。上述更新请求可用于指示数据库中相应的记录进行更新。
图3示出了购买热卖电脑“XXX笔记本电脑”时的显示界面,作为一种可选的实施例,当用户A1在终端设备B1上购买该电脑时,用户A1点击图3中的“+”按钮,选择需要购买电脑的数量,当用户A1点击了“立即购买”按钮后,终端设备B1会产生购买消息,并将该购买消息发送给服务器,服务器根据该购买消息更新数据库。其中,上述购买消息即为更新请求,上述任务为对该记录中的电脑数量进行更新操作。
根据本申请另一个实施例,作为新的更新请求,会进入服务器的更新请求队列,服务器依次读取队列中的内容。
需要说明的是,每个更新请求具有不同的标识信息,上述标识信息可用于区分出不同的更新请求,可以通过提取数据库语句(例如,SQL语句、MySQL语句)中WHERE条件中的主键值或唯一键值,并将提取出的主键值或唯一键值作为标志信息,其中,主键值或唯一键值可以为终端设备的名称或IP地址,例如,终端设备B1发送给服务器的更新请求为C1,终端设备B2发送给服务器的更新请求为C2,以此类推;上述标识信息也可以为服务器收到不同终端设备的更新请求时的时间信息。
通过上述步骤S702可以得到用于更新热点记录的具有不同标识信息的更新请求,由于不同的更新请求具有不同的标识信息,因而可以快速区分出不同的更新请求,进一步可以确定更新请求的优先级,从而加快处理任务的速度。
步骤S704,通过第一处理进程执行用于更新数据库的当前更新请求,得到更新结果,其中,第一处理进程根据当前更新请求对数据库中需要更新的记录进行加锁,并对加锁的记录进行更新,且在第一处理进程执行当前更新请求的过程中,下一个更新请求处于等待状态。
在上述步骤S704中,上述第一处理进程可以通过对收集当前更新请求以及对内存进行更新处理,并且上述第一处理进程可以包括主线程和从线程。上述第一处理进程可以为空,也可以不为空,其中,在上述第一处理进程为空的情况下,此时第一处理进程中不存在需要处理的事务,因此第一处理进程将触发本次连接作为主线程来执行当前更新请求;在上述第一处理进程不为空的情况下,此时第一处理进程中存在正在处理的事务,因此,第一处理进程将触发本次连接作为从线程来执行当前更新请求。
此处需要说明的是,主线程用于查找当前需要更新的热点记录,并对该热点记录进行加锁处理,然后根据需要更新的热点记录对内存进行更新处理;主线程还用于收集从线程发送的更新结果,并根据该更新结果更新存储引擎中的记录。从线程用于查找主线程已处理过的热点记录的内容,并对内存进行更新处理,然后将更新后的结果发送给主线程,由主线程收集。
在一种可选的实施例中,用户A1买了1台如图3所示的“XXX笔记本电脑”,用户A2买了2台“XXX笔记本电脑”。两个用户的终端设备分别向服务器发送更新请求,并且更新请求中的标识信息为时间信息,在服务器最早收到用户A1的更新请求的情况下,优先执行该更新请求,则用户A2的更新请求处于等待状态。由于服务器有线执行用户A1的终端设备发起的更新请求,所以此时服务器更新内存中的“数量”45为44。
需要说明的是,在执行上述步骤S204之前需要对数据库中的更新记录进行加锁处理,可以防止其他进行对该记录进行更改,进而提高了系统运行的稳定性。
步骤S706,将第一处理进程切换为第二处理进程,使用第二处理进程来提交更新结果,其中,如果第二处理进程开始提交更新结果,触发第一处理进程执行下一个更新请求。
执行完步骤S704之后可以得到更新结果,服务器得到该更新结果后在第二处理进程中,对内存进行更新处理,在一种可选的实施例中,服务器将内存中的“数量”由“45”更新为“44”,并将“44”通过执行更新语句对内存中的数据进行更新,即将内存中“数量”变更为“44”。之后,根据第一处理进程对用户A2发起的更新请求进行处理。
在另一种可选的实施例中,将第一处理进程切换为第二处理进程,使用第二处理进程来提交更新结果。
需要说明的是,上述第二处理进程可用于存储引擎更新以及提交更新结果,同样上述第二处理进程可以包括主线程和从线程。其中,在第一处理进程和第二处理进程中都包含主线程和至少一个从线程。
通过上述步骤S706可知,当第一处理进程在收集当前更新请求以及对内存进行更新处理时,同时第二处理进程可以执行提交上一个更新请求的更新结果,在提交更新结果之后,并退出第二处理进行,两个处理进程互不阻塞,从而提高了更新请求的吞吐量。
此处需要说明的是,本发明将由一个处理进程来完成收集更新请求、更新内存以及提交更新结果的整个业务流程进行改进,针对执行过程中的不同的阶段提供不同的处理进程来进行处理,即采用第一处理进程来执行内存更新的事务,而采用另一个处理进程,即第二处理进程来处理提交更新结果的事务,由于第二处理进程执行提交的事务并不影响下一个更新请求进行收集和更新内存的事务,因此,可以在第一处理进程完成更新内存和事务,切换为第二处理进行执行提交更新结果的事务时,由第一处理进程对下一个更新请求进行相应的处理。另外,第二处理进程所执行的提交事务可以包括将当前更新内存的更新结果写入对应的服务器的磁盘,以及将更新结果返回给前端客户端。
基于上述步骤S702至步骤S706所公开的方案中,可以获知通过获取至少一个更新请求,并通过第一处理进程执行用于更新数据库的当前更新请求,得到更新结果,然后将第一处理进程切换为第二处理进程,使用第二处理进程来提交更新结果,容易注意到的是,当第一处理进程在收集当前更新请求以及对内存进行更新处理时,第二处理进程同时提交更新结果,两个处理进程互不阻塞,从而提高了更新请求的吞吐量,达到了提升热点记录更新性能的目的,从而实现了提高热点记录更新速度的技术效果,进而解决了数据库中单一热点记录行锁的互斥形成全局串行点的技术问题。
实施例6
根据本发明实施例,还提供了一种用于实施上述基于双进程记录操作的数据库,当上述数据库启动后,包括:位于内存的第一部分、位于持久化设备的第二部分、位于内存的第一处理进程以及位于内存的第二处理进程。
位于内存的第一部分,其中,第一部分适于接收到至少一个数据库记录更新请求;
位于持久化设备的第二部分,其中,第一部分的数据读取自第二部分并会提交到第二部分中;
位于内存的第一处理进程,适于执行用于更新数据库的当前更新请求,得到更新结果,基于当前更新请求对第一部分中需要更新的记录进行加锁,并对加锁的记录进行更新,且在第一处理进程执行当前更新请求的过程中,下一个更新请求处于等待状态;
位于内存的第二处理进程,适于提交更新结果,如果第二处理进程开始提交更新结果到第二部分,且触发第一处理进程执行上述下一个更新请求。
由上可知,当数据库启动后,首先位于内存的第一部分接收到至少一个数据库记录更新请求,并从位于持久化第二部分中读取的数据,然后将该数据提交给第二部分;位于内存的第一处理进程更新数据库的当前更新请求,得到更新结果;位于内存的第二处理进程提交更新结果,如果第二处理进程开始提交更新结果到第二部分,且触发第一处理进程执行上述下一个更新请求,容易注意到的是,当第一处理进程在收集当前更新请求以及对内存进行更新处理时,第二处理进程同时提交更新结果,两个处理进程互不阻塞,从而提高了更新请求的吞吐量,达到了提升热点记录更新性能的目的,从而实现了提高热点记录更新速度的技术效果,进而解决了数据库中单一热点记录行锁的互斥形成全局串行点的技术问题。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (13)

1.一种任务的处理方法,其特征在于,包括:
获取用于更新数据库记录的至少一个更新请求,其中,每个更新请求包括了不同任务的标识信息;
使用第一处理进程执行当前更新所述数据库记录的当前更新请求,得到更新结果,其中,在所述第一处理进程执行所述当前更新请求的过程中,下一个更新请求处于等待状态;
使用第二处理进程提交所述更新结果,其中,如果所述第二处理进程开始提交所述更新结果,触发所述第一处理进程执行所述下一个更新请求。
2.根据权利要求1所述的方法,其特征在于,在所述数据记录为热点记录的情况下,
其中,在使用第一处理进程执行当前更新所述热点记录的更新请求,得到更新结果之前,所述方法还包括:
判断所述当前更新请求是否满足前置条件,其中,所述前置条件用于确定所述当前更新请求是否用于读写所述热点记录;
如果所述当前更新请求满足所述前置条件,获取所述当前更新请求中携带的任务标识信息;
根据所述当前更新请求中携带的所述任务标识信息查找得到对应的执行单元,其中,所述执行单元包括所述第一处理进程和所述第二处理进程,同一个热点记录的更新请求都通过所述执行单元来执行。
3.根据权利要求1或2所述的方法,其特征在于,在所述数据记录为热点记录的情况下,其中,所述第一处理进程和第二处理进程分别包括:主线程,其中,所述主线程用于执行首次到达的用于更新所述热点记录的更新请求以及加锁期间内更新相同的热点记录的更新请求。
4.根据权利要求3所述的方法,其特征在于,所述第一处理进程和第二处理进程分别还包括:至少一个从线程,其中,所述从线程用于执行所述加锁期间内除所述首次到达的更新请求之外的更新请求。
5.根据权利要求3所述的方法,其特征在于,在所述第一处理进程的当前处理内容为空的情况下,使用所述主线程执行所述当前更新请求,其中,使用第一处理进程执行当前更新所述热点记录的当前更新请求,得到更新结果,包括:
所述主线程根据所述当前更新请求的标识信息,查询得到所述热点记录的内容,并对所述热点记录加锁;
判断所述内容是否符合所述当前更新请求所确定的查询条件;
如果符合,则在内存中更新所述热点记录的内容,得到第一更新结果;
如果不符合,则直接释放所述第一处理进程。
6.根据权利要求5所述的方法,其特征在于,在内存中更新所述热点记录的内容,
得到第一更新结果之后,所述方法还包括:
收集预定时间段内所述至少一个从线程的第二更新结果,其中,所述主线程在所述预定时间段内处于挂起状态;
根据所述第一更新结果和所述收集到的至少一个第二更新结果,更新存储引擎的记录;
将所述第一处理进程的主线程切换至第二处理进程的主线程。
7.根据权利要求6所述的方法,其特征在于,在所述主线程和至少一个从线程更新完成所述热点记录之后,启动所述第二处理进程,其中,使用第二处理进程提交所述更新结果,包括:
启动所述第二处理进程中的主线程按照更新所述热点记录的更新结果执行提交流程;
退出所述第一处理进程,并释放所述第一处理进程。
8.根据权利要求3所述的方法,其特征在于,在所述第一处理进程的当前处理内容不为空的情况下,使用所述从线程执行所述当前更新请求,其中,使用第一处理进程执行当前更新所述热点记录的当前更新请求,得到更新结果,包括:
所述从线程读取所述主线程已经处理过的热点记录的内容;
判断所述主线程已经处理过的热点记录的内容是否符合所述当前更新请求所确定的查询条件;
如果符合,则在内存中更新所述热点记录的内容,得到第二更新结果;
如果不符合,则直接释放所述第一处理进程。
9.根据权利要求8所述的方法,其特征在于,在所述主线程和至少一个从线程更新完成所述热点记录之后,启动所述第二处理进程,其中,使用第二处理进程提交所述更新结果,包括:
所述第二处理进程中的主线程完成所述提交流程;
退出所述第二处理进程,并释放所述第二处理进程。
10.根据权利要求3所述的方法,其特征在于,在所述第二处理进程提交所述更新结果的过程中,所述第二处理进程中的主线程从所述第二处理进程中的主线程中继承用于锁定所述数据库记录的锁,并读取未提交的更新请求。
11.一种任务的处理装置,其特征在于,包括:
获取模块,用于获取用于更新热点记录的至少一个更新请求,其中,每个更新请求包括了不同任务的标识信息;
执行模块,用于使用第一处理进程执行当前更新所述热点记录的当前更新请求,得到更新结果,其中,在所述第一处理进程执行所述当前更新请求的过程中,
下一个更新请求处于等待状态;
提交模块,用于使用第二处理进程提交所述更新结果,其中,如果所述第二处理进程开始提交所述更新结果,触发所述第一处理进程执行所述下一个更新请求。
12.一种基于数据库的任务处理方法,其特征在于,包括:
获取至少一个更新请求,其中,每个更新请求包括了不同任务的标识信息;
通过第一处理进程执行用于更新数据库的当前更新请求,得到更新结果,其中,所述第一处理进程根据所述当前更新请求对所述数据库中需要更新的记录进行加锁,并对加锁的记录进行更新,且在所述第一处理进程执行所述当前更新请求的过程中,下一个更新请求处于等待状态;
将所述第一处理进程切换为第二处理进程,使用所述第二处理进程来提交所述更新结果,其中,如果所述第二处理进程开始提交所述更新结果,触发所述第一处理进程执行所述下一个更新请求。
13.一种基于双进程记录操作的数据库,其特征在于,当所述数据库启动后,包括:
位于内存的第一部分,其中,所述第一部分适于接收到至少一个数据库记录更新请求;
位于持久化设备的第二部分,其中,所述第一部分的数据读取自第二部分并会提交到第二部分中;
位于内存的第一处理进程,适于执行用于更新数据库的当前更新请求,得到更新结果,基于当前更新请求对所述第一部分中需要更新的记录进行加锁,并对加锁的记录进行更新,且在所述第一处理进程执行所述当前更新请求的过程中,下一个更新请求处于等待状态;以及
位于内存的第二处理进程,适于提交所述更新结果,如果所述第二处理进程开始提交所述更新结果到第二部分,且触发所述第一处理进程执行上述下一个更新请求。
CN201611094438.6A 2016-12-01 2016-12-01 任务的处理方法和处理装置 Pending CN108132831A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201611094438.6A CN108132831A (zh) 2016-12-01 2016-12-01 任务的处理方法和处理装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201611094438.6A CN108132831A (zh) 2016-12-01 2016-12-01 任务的处理方法和处理装置

Publications (1)

Publication Number Publication Date
CN108132831A true CN108132831A (zh) 2018-06-08

Family

ID=62388364

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201611094438.6A Pending CN108132831A (zh) 2016-12-01 2016-12-01 任务的处理方法和处理装置

Country Status (1)

Country Link
CN (1) CN108132831A (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109634665A (zh) * 2018-11-08 2019-04-16 阿里巴巴集团控股有限公司 一种数据记录并发操作请求的控制方法及装置
CN110109936A (zh) * 2019-05-13 2019-08-09 四川新网银行股份有限公司 一种规避数据库锁等待以及事务合并提交的方法
CN111444199A (zh) * 2019-01-17 2020-07-24 阿里巴巴集团控股有限公司 数据处理方法及装置、存储介质和处理器
CN111858626A (zh) * 2020-06-04 2020-10-30 武汉达梦数据库有限公司 一种基于并行执行的数据同步的方法和装置
CN113297228A (zh) * 2021-07-27 2021-08-24 深圳华锐金融技术股份有限公司 基于多活实例的MySQL写入方法、装置、设备及介质
CN113434222A (zh) * 2021-06-30 2021-09-24 青岛海尔科技有限公司 应用程序的控制方法、装置、存储介质及电子装置
CN114138808A (zh) * 2021-12-07 2022-03-04 中国建设银行股份有限公司 数据更新方法、装置、电子设备及可读存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5410700A (en) * 1991-09-04 1995-04-25 International Business Machines Corporation Computer system which supports asynchronous commitment of data
US6243715B1 (en) * 1998-11-09 2001-06-05 Lucent Technologies Inc. Replicated database synchronization method whereby primary database is selected queries to secondary databases are referred to primary database, primary database is updated, then secondary databases are updated
US6253212B1 (en) * 1998-06-23 2001-06-26 Oracle Corporation Method and system for maintaining checkpoint values
CN101303751A (zh) * 2007-04-30 2008-11-12 埃森哲全球服务有限公司 交替处理的方法、系统和计算机程序产品
CN101699439A (zh) * 2009-11-16 2010-04-28 中兴通讯股份有限公司 一种数据库的事务提交方法和装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5410700A (en) * 1991-09-04 1995-04-25 International Business Machines Corporation Computer system which supports asynchronous commitment of data
US6253212B1 (en) * 1998-06-23 2001-06-26 Oracle Corporation Method and system for maintaining checkpoint values
US6243715B1 (en) * 1998-11-09 2001-06-05 Lucent Technologies Inc. Replicated database synchronization method whereby primary database is selected queries to secondary databases are referred to primary database, primary database is updated, then secondary databases are updated
CN101303751A (zh) * 2007-04-30 2008-11-12 埃森哲全球服务有限公司 交替处理的方法、系统和计算机程序产品
CN101699439A (zh) * 2009-11-16 2010-04-28 中兴通讯股份有限公司 一种数据库的事务提交方法和装置

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109634665A (zh) * 2018-11-08 2019-04-16 阿里巴巴集团控股有限公司 一种数据记录并发操作请求的控制方法及装置
CN111444199A (zh) * 2019-01-17 2020-07-24 阿里巴巴集团控股有限公司 数据处理方法及装置、存储介质和处理器
CN111444199B (zh) * 2019-01-17 2023-11-14 阿里巴巴集团控股有限公司 数据处理方法及装置、存储介质和处理器
CN110109936A (zh) * 2019-05-13 2019-08-09 四川新网银行股份有限公司 一种规避数据库锁等待以及事务合并提交的方法
CN111858626A (zh) * 2020-06-04 2020-10-30 武汉达梦数据库有限公司 一种基于并行执行的数据同步的方法和装置
CN113434222A (zh) * 2021-06-30 2021-09-24 青岛海尔科技有限公司 应用程序的控制方法、装置、存储介质及电子装置
CN113434222B (zh) * 2021-06-30 2023-06-09 青岛海尔科技有限公司 应用程序的控制方法、装置、存储介质及电子装置
CN113297228A (zh) * 2021-07-27 2021-08-24 深圳华锐金融技术股份有限公司 基于多活实例的MySQL写入方法、装置、设备及介质
CN113297228B (zh) * 2021-07-27 2021-10-08 深圳华锐金融技术股份有限公司 基于多活实例的MySQL写入方法、装置、设备及介质
CN114138808A (zh) * 2021-12-07 2022-03-04 中国建设银行股份有限公司 数据更新方法、装置、电子设备及可读存储介质

Similar Documents

Publication Publication Date Title
CN108132831A (zh) 任务的处理方法和处理装置
CN108197285A (zh) 一种数据推荐方法以及装置
JP2019518257A (ja) 状態制御方法及び装置
CN103955405B (zh) 一种应用管理方法及其装置
CN106202441A (zh) 基于关系型数据库的数据处理方法、装置和系统
CN104424122B (zh) 一种电子设备及内存划分方法
WO2018196553A1 (zh) 标识的获取方法及装置、存储介质以及电子装置
CN102272736A (zh) 提高资源监视数据的消费者系统和生产者系统之间的规模
CN108205476A (zh) 一种多线程日志输出的方法及装置
CN108694188A (zh) 一种索引数据更新的方法以及相关装置
CN105389266B (zh) 一种数据管理方法及装置
CN105373746B (zh) 一种分布式数据处理方法和装置
CN109189972A (zh) 一种目标行踪确定方法、装置、设备及计算机存储介质
KR101416586B1 (ko) 해쉬를 이용한 전문 기반 논리 연산 수행 방법
CN110457903A (zh) 一种病毒分析方法、装置、设备及介质
CN105849703B (zh) 通过上下文分区的经分类的事件监视
CN109802859A (zh) 一种网络图中的节点推荐方法和服务器
JP6501924B2 (ja) アラートを解除する方法及びサーバー
CN108280567A (zh) 一种智能云服务工作流引擎控制方法及系统
CN106506399B (zh) 实现mfp的方法、装置及数据交换芯片
CN108055161A (zh) 一种组网优化方法及装置
CN106685708A (zh) 一种服务关系的确定方法、装置及系统
CN115563160A (zh) 数据处理方法、装置、计算机设备和计算机可读存储介质
CN106254575B (zh) 一种确定用户标识的方法和装置
CN110032559A (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
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20180608