CN114168626A - 一种数据库操作的处理方法、装置、设备及介质 - Google Patents

一种数据库操作的处理方法、装置、设备及介质 Download PDF

Info

Publication number
CN114168626A
CN114168626A CN202111523241.0A CN202111523241A CN114168626A CN 114168626 A CN114168626 A CN 114168626A CN 202111523241 A CN202111523241 A CN 202111523241A CN 114168626 A CN114168626 A CN 114168626A
Authority
CN
China
Prior art keywords
transaction
processing
database
transaction unit
unit
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
CN202111523241.0A
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.)
China Construction Bank Corp
Original Assignee
China Construction Bank Corp
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 China Construction Bank Corp filed Critical China Construction Bank Corp
Priority to CN202111523241.0A priority Critical patent/CN114168626A/zh
Publication of CN114168626A publication Critical patent/CN114168626A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • 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/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24532Query optimisation of parallel queries
    • 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/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases

Landscapes

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

Abstract

本申请涉及数据库技术领域,具体涉及一种数据库操作的处理方法、装置、设备及介质,用于提高使用关系型数据库的服务器的并发性能。该方法应用于使用关系型数据库的服务器中,该方法包括:接收客户端的服务请求,服务请求用于指示完成一个或多个数据库事务,将一个或多个数据库事务中的任一数据库事务的多个数据库操作封装为第一事务单元,将第一事务单元放入多个事务队列的第一事务队列进行处理,将第一事务单元的处理结果发送给客户端,其中,处理结果用于指示第一事务单元处理成功或失败,第一事务单元处理失败表示多个数据库操作中某一数据库操作失败,第一事务单元处理成功表示所述多个数据库操作中的最后一步数据库操作成功。

Description

一种数据库操作的处理方法、装置、设备及介质
技术领域
本申请涉及数据库技术领域,具体涉及一种数据库操作的处理方法、装置、设备及介质。
背景技术
随着大数据时代的到来,数据存储变得十分重要。数据库是按照数据结构来组织、存储和管理数据的仓库,是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。数据库作为数据管理的有效技术,发挥着越来越重要的作用。
关系型数据库由于性能优异、可扩展性强等原因,得到了广泛使用。但是关系型数据库需要支持数据库事务,数据库事务必须具备ACID特性即原子性(Atomic)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability),因此关系型数据库不支持异步处理,在事务要求高的场景无法使用,导致使用关系型数据库的服务器的并发性较低。
发明内容
本申请实施例提供一种数据库操作的处理方法、装置、设备及介质,用于提高使用关系型数据库的服务器的并发性能。
第一方面,本申请提供一种数据库操作的处理方法,应用于使用关系型数据库的服务器中,所述方法包括:
接收客户端的服务请求,所述服务请求用于指示完成一个或多个数据库事务;
将所述一个或多个数据库事务中的任一数据库事务的多个数据库操作封装为第一事务单元;
将所述第一事务单元放入多个事务队列的第一事务队列进行处理,其中,每个事务队列对应一个线程;
返回所述第一事务单元的处理结果,并将所述第一事务单元的处理结果发送给所述客户端,其中,所述处理结果用于标识所述第一事务单元处理成功或失败,所述第一事务单元处理失败表示所述多个数据库操作中某一数据库操作失败,所述第一事务单元处理成功表示所述多个数据库操作中的最后一步数据库操作成功。
在一种可能的实施例中,将所述第一事务单元放入多个事务队列的第一事务队列进行处理,包括:
确定多个事务队列中每个事务队列包含的多个事务单元的数量;
将包含最少事务单元的事务队列确定为所述第一事务队列;
将所述第一事务单元放入所述第一事务队列进行处理。
在一种可能的实施例中,将所述第一事务单元的处理结果发送给客户端,包括:
确定所述第一事务单元对应的第一事务标识,所述第一事务标识用于标识所述第一事务单元;
基于所述第一事务标识和所述第一事务单元的处理结果生成报文;
将所述报文发送给所述客户端;其中,所述报文用于指示所述第一事务标识对应的第一事务单元处理成功或失败。
在一种可能的实施例中,基于所述第一事务标识和所述第一事务单元的处理结果生成报文,包括:
若所述第一事务单元的处理结果为失败,则确定所述第一事务单元的失败原因;
基于所述第一事务标识、所述第一事务单元的处理结果、以及所述失败原因,生成报文。
第二方面,本申请提供一种数据库操作的处理装置,所述装置设置于使用关系型数据库的服务器中,所述装置包括:
接收模块,用于接收客户端的服务请求,所述服务请求用于指示完成一个或多个数据库事务;
封装模块,用于将所述一个或多个数据库事务中的任一数据库事务的多个数据库操作封装为第一事务单元;
处理模块,用于将所述第一事务单元放入多个事务队列的第一事务队列进行处理,其中,每个事务队列对应一个线程;
发送模块,用于返回所述第一事务单元的处理结果,并将所述第一事务单元的处理结果发送给所述客户端,其中,所述处理结果用于标识所述第一事务单元处理成功或失败,所述第一事务单元处理失败表示所述多个数据库操作中某一数据库操作失败,所述第一事务单元处理成功表示所述多个数据库操作中的最后一步数据库操作成功。
在一种可能的实施例中,所述处理模块具体用于:
确定多个事务队列中每个事务队列包含的多个事务单元的数量;
将包含最少事务单元的事务队列确定为所述第一事务队列;
将所述第一事务单元放入所述第一事务队列进行处理。
在一种可能的实施例中,所述发送模块具体用于:
确定所述第一事务单元对应的第一事务标识,所述第一事务标识用于标识所述第一事务单元;
基于所述第一事务标识和所述第一事务单元的处理结果生成报文;
将所述报文发送给所述客户端;其中,所述报文用于指示所述第一事务标识对应的第一事务单元处理成功或失败。
在一种可能的实施例中,所述发送模块具体用于:
若所述第一事务单元的处理结果为失败,则确定所述第一事务单元的失败原因;
基于所述第一事务标识、所述第一事务单元的处理结果、以及所述失败原因,生成报文。
第三方面,本申请提供一种电子设备,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序指令执行第一方面中任一项所述的方法。
第四方面,本申请提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被计算机执行时,使所述计算机执行第一方面中任一项所述的方法。
第五方面,本申请提供了一种计算机程序产品,所述计算机程序产品包括:计算机程序代码,当所述计算机程序代码在计算机上运行时,使得计算机执行第一方面中任一项所述的方法。
在本申请实施例中,接收客户端用于指示完成一个或多个数据库事务的服务请求,将一个或多个数据库事务中的任一数据库事务的多个数据库操作封装为第一事务单元,将第一事务单元放入多个事务队列的第一事务队列进行处理,返回第一事务单元的处理结果,并将第一事务单元的处理结果发送给客户端。以数据库事务为单元对多个数据库操作进行统一处理,将数据库操作从阻塞操作转换为非阻塞操作,保留简单的数据库事务。且将数据库操作异步化,不用等待上一个事务单元的处理结果,就可以封装并处理下一个事务单元,使得不同数据库事务之间可以并发处理,提升了使用关系型数据库的服务器的并发性能。
附图说明
为了更清楚地说明本申请实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1A为现有技术中基于BIO框架的网络服务***的结构示意图;
图1B为现有技术中基于NIO框架的网络服务***的结构示意图;
图2为本申请实施例提供的数据库操作的处理方法的应用场景示意图;
图3为本申请实施例提供的一种数据库操作的处理方法的流程示意图;
图4A为本申请实施例提供的一种数据库的结构示意图;
图4B为本申请实施例提供的一种数据库的应用逻辑模块和数据代理模块的关系示意图;
图5为本申请实施例提供的一种数据库操作的处理装置的结构图;
图6为本申请实施例提供的一种电子设备的结构图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下面将结合本发明实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以按不同于此处的顺序执行所示出或描述的步骤。
本申请的说明书和权利要求书及上述附图中的术语“第一”和“第二”是用于区别不同对象,而非用于描述特定顺序。此外,术语“包括”以及它们任何变形,意图在于覆盖不排他的保护。例如包含了一系列步骤或单元的过程、方法、***、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
本申请实施例中,“多个”可以表示至少两个,例如可以是两个、三个或者更多个,本申请实施例不做限制。
在介绍本申请实施例所提供的数据库操作的处理方法之前,首先对本申请实施例涉及的基本概念进行简单介绍。
1、I/O操作,指程序中与输入(input)/输出(output)相关的操作。例如磁盘读写、数据库访问、网络访问等。
2、NIO,指非阻塞I/O操作,不必等待I/O操作的数据返回,就可以继续下一步操作。
3、BIO,指阻塞I/O操作,必须等待I/O操作的数据返回,才可以继续下一步操作。
4、关系型数据库,支持数据库事务,例如Oracle、Mysql等数据库。
5、非关系型数据库,不支持数据库事务,例如Redis、MongoDB、Cassandra等数据库。
BIO框架中所有的I/O操作都是阻塞的,为了支持单台服务器的并发处理,当多个客户端101向服务端102发送多个服务请求时,服务端102可以为每个服务请求创建单独的线程进行处理。请参照图1A,为现有技术中基于BIO框架的网络服务***的结构示意图,该网络服务***包括多个客户端101和一个服务端102。第一个客户端101向服务端102发送服务请求1,服务端102会创建线程1用于处理服务请求1,第二个客户端101向服务端102发送服务请求2,服务端102会创建线程2用于处理服务请求2,以此类推,第n个客户端101向服务端102发送服务请求n,服务端102会创建线程n用于处理服务请求n。
但是随着线程的增多,服务端102的性能会急剧下降,可能发生线程堆栈溢出、创建新线程失败等问题,并最终导致进程宕机或者僵死,不能对外提供服务。且I/O操作是比较耗时的操作,等待I/O响应的过程中,是没有CPU处理的,为每个I/O分配一个线程会增加CPU线程调度的开销。为了解决BIO框架的限制,出现了NIO框架。服务端102利用少量的线程用于接收服务请求,通过事件机制将I/O操作异步化,不等待I/O的响应,立即处理下一个服务请求。等到I/O响应时,触发事件通知,再切换到处理I/O响应的逻辑上。由于NIO框架中使用少量的线程处理业务逻辑,所以NIO框架中的I/O操作都是非阻塞的。
请参照图1B,为现有技术中基于NIO框架的网络服务***的结构示意图,该网络服务***包括多个客户端101和一个服务端102。多个客户端101向服务端102发送多个服务请求时,服务端102的主线程负责监听多个服务请求,建立多个客户端101与服务端102之间的连接,将多个服务请求发送给子线程。子线程将各个服务请求分发给线程池中对应的线程进行处理。
如上介绍了BIO框架和NIO框架,非关系型数据库由于不需要支持数据库事务,因此天生支持异步及高并发,单个连接可以同时处理多个服务请求。而关系型数据库由于需要支持数据库事务,不支持异步处理,且单个连接在事务间不能线程共享,在事务要求高的场景无法使用。因此现有的NIO框架几乎都不支持关系型数据库,使得NIO框架的使用场景收到了限制,很多业务***不得不继续使用BIO框架进行开发。
鉴于此,本申请实施例提供一种数据库操作的处理方法,使用关系型数据库的服务器接收客户端的服务请求之后,将数据库事务的多个数据库操作封装为第一事务单元,将第一事务单元放入第一事务队列进行处理,返回第一事务单元的处理结果,并处理结果发送给客户端。将原本应该访问关系型数据库的数据库操作缓存在内存中,以数据库事务为单元对多个数据库操作进行处理,将关系型数据库的数据库操作从阻塞操作转换为非阻塞操作,使NIO框架支持简单的关系型数据库的事务,扩展NIO框架的使用场景,且不同数据库事务之间可以并发处理,提升了使用关系型数据库的服务器的并发性能。
在介绍完本申请实施例的设计思想之后,下面对本申请实施例的技术方案能够适用的应用场景做一些简单介绍,需要说明的是,以下介绍的应用场景仅用于说明本申请实施例而非限定。在具体实施过程中,可以根据实际需要灵活地应用本申请实施例提供的技术方案。
请参照图2,为本申请实施例提供的一种数据库操作的处理方法的应用场景示意图,该应用场景包括客户端201和服务器202。客户端201和服务器202之间可以相互通信。
客户端201指为客户提供本地服务的程序,一般安装在终端上,终端例如可以为手机、个人计算机(personal computer,PC)、笔记本电脑等。应当说明的是,图2是以一个客户端为例,实际上不限制客户端的数量。
服务器202使用关系型数据库,可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式***,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器,但并不局限于此。
客户端201可以向服务器202发送服务请求,服务器202启动应用程序,对该服务请求进行处理,并将处理结果发送给客户端201。其中,服务器202具体如何处理服务请求的过程将在下文进行介绍。
如上介绍了本申请实施例的应用场景,下面以图2中的服务器202执行数据库操作的处理方法为例进行介绍。请参照图3,为本申请实施例提供的一种数据库操作的处理方法的流程示意图。
S301、接收客户端的服务请求。
服务器可以接收不同客户端发送的多个服务请求。对于简单的服务请求,每个服务请求可以用于指示完成一个数据库事务。例如,某个服务请求用于指示一笔转账交易,具体例如该转账为用户A向用户B转账1万元,这笔转账交易就是一个数据库事务。
对于复杂的服务请求,每个服务请求可以用于指示完成多个数据库事务。例如,某个服务请求用于指示3笔转账交易,具体例如第一笔转账为用户A向用户B转账1万元,第二笔转账为用户C向用户D转账2万元,第三笔转账为用户D向用户E转账1万元,每一笔转账都是一个数据库事务,该服务请求用于指示完成3个数据库事务。
其中涉及到数据库事务,下面进行示例介绍。数据库事务是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。数据库事务从事务开始到事务结束之间执行的全部数据库操作组成。例如,服务器包括应用逻辑模块,该应用逻辑模块用于确定事务开始、事务结束、以及从事务开始与到事务结束之间需要执行的多个数据库操作。
例如,某个数据库事务为用户A向用户B转账1万元,该数据库事务有两个数据库操作,第一步数据库操作:从用户A的余额扣款1万元,第二步数据库操作:为用户B的余额增加1万元。
S302、将一个或多个数据库事务中的任一数据库事务的多个数据库操作封装为第一事务单元。
当服务请求用于指示完成一个数据库事务时,直接将该数据库事务的多个数据库操作封装为第一事务单元。例如,服务请求用于指示完成用户A向用户B转账1万元,服务器并不立即执行从用户A的余额扣款1万元的第一步数据库操作,而是将第一步数据库操作、为用户B的余额增加1万元的第二步数据库操作先缓存起来,封装为一个事务单元,后续再处理。
当服务请求用于指示完成多个数据库事务时,将多个数据库事务中的每个数据库事务的多个数据库操作封装为一个事务单元,可以获得多个事务单元。
下面以多个数据库事务中的任一数据库事务为例介绍封装过程,具体的,服务器可以将任一数据库事务的多个数据库操作封装为第一事务单元,任一数据库事务为多个数据库事务中的一个数据库事务。
为了便于区分多个事务单元,在一种可能的实施例中,服务器可以为每个事务单元生成一个事务标识(Identity Document,ID)。事务ID用于唯一标识事务单元和对应的数据库事务。例如服务器包括数据代理模块,该数据代理模块用于进行事件注册,将多个数据库操作封装为一个事务单元,以及为每个事务单元生成一个事务ID。每个事务单元实际上为一个Map集合,Map是一种键-值对(key-value)集合,其中,key为事务ID,value为列表(List),List可以存储事务ID对应的数据库事务的多个数据库操作。
S303、将第一事务单元放入多个事务队列的第一事务队列进行处理。
服务器将多个数据库操作封装为第一事务单元之后,可以将第一事务单元放入多个事务队列的第一事务队列进行处理。例如,服务器还包括事务队列模块,事务队列模块包括多个事务队列,数据代理模块还用于将第一事务单元提交到事务队列模块中的第一事务队列。其中,第一事务队列可以是多个事务队列中的任意一个事务队列,第一事务队列也可以是包含最少事务单元的事务队列。
具体的,服务器确定多个事务队列中每个事务队列包含的多个事务单元的数量,将包含最少事务单元的事务队列确定为第一事务队列,将第一事务单元放入第一事务队列进行处理。
考虑到包含最少事务单元的第一事务队列可能不止一个,在一种可能的实施例中,若包含最少事务单元的第一事务队列为多个,则可以确定每个第一事务队列包含的多个事务单元的数据库操作的总数量,将第一事务单元放入数据库操作的总数量最少的第一事务队列进行处理。
例如,目前有2个第一事务队列包含的事务单元最少,分别为第一事务队列A和第一事务队列B,它们均包含2个事务单元。第一事务队列A的一个事务单元有2个数据库操作,另一个事务单元有3个数据库操作,则该第一事务队列A总共包含5个数据库操作。第一事务队列B的一个事务单元有1个数据库操作,另一个事务单元有2个数据库操作,则该第一事务队列B总共包含3个数据库操作。由于第一事务队列B包含的数据库操作的总数量小于第一事务队列A包含的数据库操作的总数量,因此将第一事务单元放入第一事务队列B进行处理。
本申请实施例中,将第一事务单元分发至包含最少事务单元的事务队列,使得各个使得事务队列中的排队的事务单元的数量差不多,可以保证各个事务队列负载均衡,且可以使第一事务单元可以尽快被处理,提高处理数据库事务的效率。
进一步,事务队列可以使用并发链接队列(ConcurrentLinkedQueue)实现,ConcurrentLinkedQueue是一个基于链接节点的无界线程安全队列,按照先进先出(FIFO)原则对各个事务单元进行排序。一个事务队列的头部是队列中时间最长的事务单元,一个事务队列的尾部是队列中时间最短的事务单元。
每个事务队列对应一个线程,即每个线程处理一个事务队列,例如服务器还包括数据库处理模块,数据库处理模块采用第一个线程处理第一个事务队列中的各个事务单元,采用第二个线程处理第二个事务队列中的各个事务单元,以此类推,采用第n个线程处理第n个事务队列中的各个事务单元。
当第一事务队列为空时,可以直接将第一事务单元放入第一事务队列,第一事务队列对应的线程会直接从第一事务队列获取第一事务单元进行处理。
当第一事务队列不为空,即第一事务队列中还有其他先来的事务单元时,将第一事务单元***到第一事务队列的尾部。第一事务队列对应的线程会从第一事务队列的头部依次获取各个事务单元进行处理。
S304、返回第一事务单元的处理结果,并将第一事务单元的处理结果发送给客户端。
具体的,第一事务队列对应的线程对第一事务单元进行处理时,依次对第一事务单元中的多个数据库操作进行处理,获得第一事务单元的处理结果。处理结果用于指示第一事务单元处理成功或失败,若多个数据库操作中某一数据库操作失败,则第一事务单元的处理结果为失败,若多个数据库操作中的最后一步数据库操作成功,说明第一事务单元中的多个数据库操作均处理成功,则第一事务单元的处理结果为成功。
例如,数据库事务为用户A向用户B转账1万元,若用户A的余额不足1万元,则从用户A的余额扣款1万元的第一步数据库操作失败,则该数据库事务对应的事务单元的处理结果为失败。当为用户B的余额增加1万元的第二步数据库操作成功时,说明第一步数据库操作也是成功的,则该数据库事务对应的事务单元的处理结果为成功。
进一步,服务器获得第一事务单元的处理结果之后,可以返回第一事务单元的处理结果。例如,数据库还包括事件通知模块,事件通知模块可以将数据库处理模块的处理结果通知给应用逻辑模块。
在一种可能的实施例中,服务器还可以确定第一事务单元对应的第一事务标识,基于第一事务标识和第一事务单元的处理结果生成报文,将报文发送给客户端。例如服务器的应用逻辑模块收到事件通知模块发送的处理结果之后,触发回调函数,通过回调函数生成用于指示处理结果的报文。其中,第一事务标识用于标识第一事务单元,报文用于指示第一事务标识对应的第一事务单元处理成功或失败。
针对不同的处理结果,生成的报文不同,下面分别进行示例介绍。
第一种,第一事务单元的处理结果为成功。
若第一事务单元的处理结果为成功,则服务器可以基于第一事务标识和第一事务单元的处理结果生成报文,该报文用于指示第一事务标识对应的第一事务单元处理成功,将该报文发送给客户端。
第二种,第一事务单元的处理结果为失败。
若第一事务单元的处理结果为失败,则服务器可以确定第一事务单元的失败原因,基于第一事务标识、第一事务单元的处理结果、以及失败原因,生成报文,该报文用于指示第一事务标识对应的第一事务单元处理失败,将该报文发送给客户端。
本申请实施例中,当处理结果为失败时,将基于事务标识、处理结果和失败原因生成的报文发送给客户端,方便客户端确定具体哪个事务失败,以及失败的具体原因,可以执行相应处理后,重新发起该事务的服务请求。
应当说明的是,S302-304是以处理任一个数据库事务为例,当服务请求用于指示完成多个数据库事务时,可以重复执行S302-304,直到该服务请求的多个数据库事务处理完成。
作为一个示例,图3实施例中的客户端例如为图2中的客户端201、服务器例如为图2中服务器202。
请参照图4A,为本申请实施例提供的服务器的结构示意图,该服务器包括应用逻辑模块401、数据代理模块402、事务队列模块403、数据库处理模块404、以及事件通知模块405。下面分别介绍各个模块。
其中,应用逻辑模块401用于确定从开启事务指令到提交事务指令之间的多个数据库操作。数据代理模块402用于将多个数据库操作封装为一个事务单元,将该事务单元提交到事务队列模块403中对应的事务队列。事务队列模块403包括多个事务队列,每个事务队列包括多个事务单元。数据库处理模块404包括多个线程,每个线程处理一个事务队列。事件通知模块405用于将数据库处理模块404的处理结果通知给应用逻辑模块401。应用逻辑模块401还用于事件回调,通过回调函数将处理结果生成报文,返回给客户端。
请参照图4B,为本申请实施例提供的服务器的应用逻辑模块和数据代理模块的关系示意图,其中,应用逻辑模块401可以确定某数据库事务从开启事务指令到提交事务指令之间的数据库操作1、数据库操作2、……、数据库操作n。针对开启事务指令,数据代理模块402生成事务ID。针对各个数据库操作,数据代理模块402分别将数据库操作1、数据库操作2、……、数据库操作n存入事务ID对应的列表,从而获得Map集合。针对提交事务指令,数据代理模块402将Map提交到事务队列。
为了更加清楚地说明本申请实施例提供的一种数据库操作的处理方法,下面结合图4A和图4B对数据库操作的处理方法进行示例介绍。
例如,某个服务请求用于指示完成2个数据库事务,第一个数据库事务是用户A向用户B转账1万元,第一个数据库事务是用户C向用户D转账1万元。应用逻辑模块401可以先处理第一个数据库事务,确定开启事务指令、从用户A的余额扣款1万元、向用户B的余额增加1万元、提交事务指令。数据代理模块402针对开启事务指令,生成第一事务标识。数据代理模块402分别将从用户A的余额扣款1万元的第一步数据库操作、向用户B的余额增加1万元的第二步数据库操作存入第一事务标识对应的列表,得到一个Map集合即第一事务单元。数据代理模块402针对提交事务指令,将Map即第一事务单元提交到事务队列模块403中的第一事务队列。数据库处理模块404启动某个线程对第一事务队列中的事务单元依次进行处理,获得第一事务单元的处理结果。事件通知模块405用于将第一事务单元的处理结果通知给应用逻辑模块401。应用逻辑模块401再通过回调函数将处理结果生成报文,返回给客户端。
数据代理模块402将第一事务单元提交到事务队列模块403中的第一事务队列之后,应用逻辑模块401和数据代理模块402不必等待该第一事务单元的响应,可以直接处理第二数据库事务,处理第二数据库事务的过程请参照前文论述的处理第一个数据库事务的过程,此处不再赘述。
综上所述,本申请实施例提供一种数据库操作的处理方法,接收客户端用于指示完成数据库事务的服务请求,将数据库事务的多个数据库操作封装为第一事务单元,将第一事务单元放入多个事务队列的第一事务队列进行处理,将第一事务单元的处理结果发送给客户端。服务器将原本应该访问关系型数据库的操作缓存在内存中,以数据库事务为单元对多个数据库操作进行处理,将关系型数据库的数据库操作从阻塞操作转换为非阻塞操作,通过事务队列和事件机制,将数据库操作异步化,不用等待事务单元的处理结果,就可以封装并处理下一个事务单元,使NIO框架支持简单的关系型数据库的事务,扩展NIO框架的应用场景,使得NIO技术可以更广泛的使用。且不同数据库事务之间可以并发处理,提升了使用关系型数据库的服务器的并发性能。
基于同一发明构思,本申请实施例提供一种数据库操作的处理装置,该装置设置于前文论述的服务器中,服务器使用关系型数据库,请参照图5,该装置包括:
接收模块501,用于接收客户端的服务请求,服务请求用于指示完成一个或多个数据库事务;
封装模块502,用于将一个或多个数据库事务中的任一数据库事务的多个数据库操作封装为第一事务单元;
处理模块503,用于将第一事务单元放入多个事务队列的第一事务队列进行处理,其中,每个事务队列对应一个线程;
发送模块504,用于返回第一事务单元的处理结果,将第一事务单元的处理结果发送给客户端,其中,处理结果用于指示第一事务单元处理成功或失败,第一事务单元处理失败表示多个数据库操作中某一数据库操作失败,第一事务单元处理成功表示多个数据库操作中的最后一步数据库操作成功。
在一种可能的实施例中,处理模块503具体用于:
确定多个事务队列中每个事务队列包含的多个事务单元的数量;
将包含最少事务单元的事务队列确定为第一事务队列;
将第一事务单元放入第一事务队列进行处理。
在一种可能的实施例中,发送模块504具体用于:
确定第一事务单元对应的第一事务标识,第一事务标识用于标识第一事务单元;
基于第一事务标识和第一事务单元的处理结果生成报文;
将报文发送给客户端;其中,报文用于指示第一事务标识对应的第一事务单元处理成功或失败。
在一种可能的实施例中,发送模块504具体用于:
若第一事务单元的处理结果为失败,则确定第一事务单元的失败原因;
基于第一事务标识、第一事务单元的处理结果、以及失败原因,生成报文。
作为一种实施例,图5论述的装置可以用于执行图3、图4A、图4B所示的实施例中所述的方法,因此,对于该装置的各功能模块所能够实现的功能等可参考图3、图4A、图4B所示的实施例的描述,此处不再赘述。
基于同一发明构思,本申请实施例提供一种电子设备,该设备可以实现前文论述的服务器的功能,请参照图6,该设备包括处理器601和存储器602。
至少一个处理器601,以及与至少一个处理器601连接的存储器602,本申请实施例中不限定处理器601与存储器602之间的具体连接介质,图6中是以处理器601和存储器602之间通过总线600连接为例。总线600在图6中以粗线表示,其它部件之间的连接方式,仅是进行示意性说明,并不引以为限。总线600可以分为地址总线、数据总线、控制总线等,为便于表示,图6中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。或者,处理器601也可以称为控制器,对于名称不做限制。
在本申请实施例中,存储器602存储有可被至少一个处理器601执行的指令,至少一个处理器601通过执行存储器602存储的指令,可以执行前文论述数据库操作的处理方法。处理器601可以实现图5所示的装置中各个模块的功能。
其中,处理器601是该装置的控制中心,可以利用各种接口和线路连接整个该控制设备的各个部分,通过运行或执行存储在存储器602内的指令以及调用存储在存储器602内的数据,该装置的各种功能和处理数据,从而对该装置进行整体监控。
在一种可能的设计中,处理器601可包括一个或多个处理单元,处理器601可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作***、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器601中。在一些实施例中,处理器601和存储器602可以在同一芯片上实现,在一些实施例中,它们也可以在独立的芯片上分别实现。
处理器601可以是通用处理器,例如中央处理器(CPU)、数字信号处理器、专用集成电路、现场可编程门阵列或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件,可以实现或者执行本申请实施例中公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本申请实施例所公开的数据库操作的处理方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
存储器602作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块。存储器602可以包括至少一种类型的存储介质,例如可以包括闪存、硬盘、多媒体卡、卡型存储器、随机访问存储器(Random AccessMemory,RAM)、静态随机访问存储器(Static Random Access Memory,SRAM)、可编程只读存储器(Programmable Read Only Memory,PROM)、只读存储器(Read Only Memory,ROM)、带电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)、磁性存储器、磁盘、光盘等。存储器602是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。本申请实施例中的存储器602还可以是电路或者其它任意能够实现存储功能的装置,用于存储程序指令和/或数据。
通过对处理器601进行设计编程,可以将前述实施例中介绍的数据库操作的处理方法所对应的代码固化到芯片内,从而使芯片在运行时能够执行图3所示的实施例的数据库操作的处理方法的步骤。如何对处理器601进行设计编程为本领域技术人员所公知的技术,这里不再赘述。
基于同一发明构思,本申请实施例提供一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序包括程序指令,程序指令当被计算机执行时,使计算机执行如前文论述任一的数据库操作的处理方法。由于上述计算机可读存储介质解决问题的原理与数据库操作的处理方法相似,因此上述计算机可读存储介质的实施可以参见方法的实施,重复之处不再赘述。
基于同一发明构思,本申请实施例还提供了一种计算机程序产品,该计算机程序产品包括:计算机程序代码,当该计算机程序代码在计算机上运行时,使得计算机执行如前文论述任一的数据库操作的处理方法。由于上述计算机程序产品解决问题的原理与数据库操作的处理方法相似,因此上述计算机程序产品的实施可以参见方法的实施,重复之处不再赘述。
程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质可以是——但不限于——电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
本发明的实施方式中提供的数据库操作的处理方法的程序产品可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在计算设备上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。
可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、有线、光缆、RF等,或者上述的任意合适的组合。
可以用一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
应当注意,尽管在上文详细描述中提及了装置的若干单元或子单元,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多单元的特征和功能可以在一个单元中具体化。反之,上文描述的一个单元的特征和功能可以进一步划分为由多个单元来具体化。
本领域内的技术人员应明白,本申请的实施例可提供为方法、***、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

Claims (11)

1.一种数据库操作的处理方法,其特征在于,应用于使用关系型数据库的服务器中,所述方法包括:
接收客户端的服务请求,所述服务请求用于指示完成一个或多个数据库事务;
将所述一个或多个数据库事务中的任一数据库事务的多个数据库操作封装为第一事务单元;
将所述第一事务单元放入多个事务队列的第一事务队列进行处理,其中,每个事务队列对应一个线程;
返回所述第一事务单元的处理结果,并将所述第一事务单元的处理结果发送给所述客户端,其中,所述处理结果用于标识所述第一事务单元处理成功或失败,所述第一事务单元处理失败表示所述多个数据库操作中某一数据库操作失败,所述第一事务单元处理成功表示所述多个数据库操作中的最后一步数据库操作成功。
2.如权利要求1所述的方法,其特征在于,将所述第一事务单元放入多个事务队列的第一事务队列进行处理,包括:
确定多个事务队列中每个事务队列包含的多个事务单元的数量;
将包含最少事务单元的事务队列确定为所述第一事务队列;
将所述第一事务单元放入所述第一事务队列进行处理。
3.如权利要求1或2所述的方法,其特征在于,将所述第一事务单元的处理结果发送给客户端,包括:
确定所述第一事务单元对应的第一事务标识,所述第一事务标识用于标识所述第一事务单元;
基于所述第一事务标识和所述第一事务单元的处理结果生成报文;
将所述报文发送给所述客户端;其中,所述报文用于指示所述第一事务标识对应的第一事务单元处理成功或失败。
4.如权利要求3所述的方法,其特征在于,基于所述第一事务标识和所述第一事务单元的处理结果生成报文,包括:
若所述第一事务单元的处理结果为失败,则确定所述第一事务单元的失败原因;
基于所述第一事务标识、所述第一事务单元的处理结果、以及所述失败原因,生成报文。
5.一种数据库操作的处理装置,其特征在于,所述装置设置于使用关系型数据库的服务器中,所述装置包括:
接收模块,用于接收客户端的服务请求,所述服务请求用于指示完成一个或多个数据库事务;
封装模块,用于将所述一个或多个数据库事务中的任一数据库事务的多个数据库操作封装为第一事务单元;
处理模块,用于将所述第一事务单元放入多个事务队列的第一事务队列进行处理,其中,每个事务队列对应一个线程;
发送模块,用于返回所述第一事务单元的处理结果,并将所述第一事务单元的处理结果发送给所述客户端,其中,所述处理结果用于标识所述第一事务单元处理成功或失败,所述第一事务单元处理失败表示所述多个数据库操作中某一数据库操作失败,所述第一事务单元处理成功表示所述多个数据库操作中的最后一步数据库操作成功。
6.如权利要求5所述的装置,其特征在于,所述处理模块具体用于:
确定多个事务队列中每个事务队列包含的多个事务单元的数量;
将包含最少事务单元的事务队列确定为所述第一事务队列;
将所述第一事务单元放入所述第一事务队列进行处理。
7.如权利要求5或6所述的装置,其特征在于,所述发送模块具体用于:
确定所述第一事务单元对应的第一事务标识,所述第一事务标识用于标识所述第一事务单元;
基于所述第一事务标识和所述第一事务单元的处理结果生成报文;
将所述报文发送给所述客户端;其中,所述报文用于指示所述第一事务标识对应的第一事务单元处理成功或失败。
8.如权利要求7所述的装置,其特征在于,所述发送模块具体用于:
若所述第一事务单元的处理结果为失败,则确定所述第一事务单元的失败原因;
基于所述第一事务标识、所述第一事务单元的处理结果、以及所述失败原因,生成报文。
9.一种电子设备,其特征在于,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序指令执行权利要求1-4中任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被计算机执行时,使所述计算机执行如权利要求1-4中任一项所述的方法。
11.一种计算机程序产品,其特征在于,所述计算机程序产品包括:计算机程序代码,当所述计算机程序代码在计算机上运行时,使得计算机执行上述如权利要求1-4中任一项所述的方法。
CN202111523241.0A 2021-12-13 2021-12-13 一种数据库操作的处理方法、装置、设备及介质 Pending CN114168626A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111523241.0A CN114168626A (zh) 2021-12-13 2021-12-13 一种数据库操作的处理方法、装置、设备及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111523241.0A CN114168626A (zh) 2021-12-13 2021-12-13 一种数据库操作的处理方法、装置、设备及介质

Publications (1)

Publication Number Publication Date
CN114168626A true CN114168626A (zh) 2022-03-11

Family

ID=80486078

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111523241.0A Pending CN114168626A (zh) 2021-12-13 2021-12-13 一种数据库操作的处理方法、装置、设备及介质

Country Status (1)

Country Link
CN (1) CN114168626A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116861455A (zh) * 2023-06-25 2023-10-10 上海数禾信息科技有限公司 事件数据处理方法、***、电子设备及存储介质

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102567089A (zh) * 2011-10-25 2012-07-11 曙光信息产业(北京)有限公司 一种分布式文件***中元数据服务器线程池的设计方法
CN104133724A (zh) * 2014-04-03 2014-11-05 腾讯科技(深圳)有限公司 并发任务调度方法及装置
JP2015060285A (ja) * 2013-09-17 2015-03-30 株式会社日立システムズ クラウドコンピューティングでのグローバルトランザクション処理方法
CN108920258A (zh) * 2018-06-26 2018-11-30 北京中电普华信息技术有限公司 一种事务处理方法及应用服务中间件
CN109189595A (zh) * 2018-09-17 2019-01-11 深圳怡化电脑股份有限公司 基于服务器的事件处理方法、装置、设备及介质
CN111198872A (zh) * 2020-01-06 2020-05-26 中科驭数(北京)科技有限公司 数据库处理事务的方法及装置
CN112506670A (zh) * 2021-02-02 2021-03-16 上海有孚智数云创数字科技有限公司 一种多节点自动化运维任务处理方法、***及存储介质
CN112799811A (zh) * 2021-01-26 2021-05-14 重庆邮电大学 一种边缘网关的高并发线程池任务调度方法

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102567089A (zh) * 2011-10-25 2012-07-11 曙光信息产业(北京)有限公司 一种分布式文件***中元数据服务器线程池的设计方法
JP2015060285A (ja) * 2013-09-17 2015-03-30 株式会社日立システムズ クラウドコンピューティングでのグローバルトランザクション処理方法
CN104133724A (zh) * 2014-04-03 2014-11-05 腾讯科技(深圳)有限公司 并发任务调度方法及装置
CN108920258A (zh) * 2018-06-26 2018-11-30 北京中电普华信息技术有限公司 一种事务处理方法及应用服务中间件
CN109189595A (zh) * 2018-09-17 2019-01-11 深圳怡化电脑股份有限公司 基于服务器的事件处理方法、装置、设备及介质
CN111198872A (zh) * 2020-01-06 2020-05-26 中科驭数(北京)科技有限公司 数据库处理事务的方法及装置
CN112799811A (zh) * 2021-01-26 2021-05-14 重庆邮电大学 一种边缘网关的高并发线程池任务调度方法
CN112506670A (zh) * 2021-02-02 2021-03-16 上海有孚智数云创数字科技有限公司 一种多节点自动化运维任务处理方法、***及存储介质

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
吉利;潘林云;刘姚;: "线程池技术在网络服务器中的应用", 计算机技术与发展, no. 08, 15 August 2017 (2017-08-15), pages 155 - 157 *
臧二云: "证券交易应用服务器的设计与实现", 中国优秀硕士学位论文全文数据库, 15 February 2012 (2012-02-15), pages 1 - 79 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116861455A (zh) * 2023-06-25 2023-10-10 上海数禾信息科技有限公司 事件数据处理方法、***、电子设备及存储介质
CN116861455B (zh) * 2023-06-25 2024-04-26 上海数禾信息科技有限公司 事件数据处理方法、***、电子设备及存储介质

Similar Documents

Publication Publication Date Title
CN107729139B (zh) 一种并发获取资源的方法和装置
US6167423A (en) Concurrency control of state machines in a computer system using cliques
CN110825535B (zh) 一种作业调度的方法和***
CN109491801B (zh) 微服务访问调度方法、装置、介质及电子设备
US11210131B2 (en) Method and apparatus for assigning computing task
CN110413822B (zh) 离线图像结构化分析方法、装置、***和存储介质
CN108055255A (zh) 一种事件库、可扩展数据管理***及其管理方法
CN112015713A (zh) 数据库任务的处理方法、装置、电子设备及可读介质
CN111897633A (zh) 一种任务处理的方法和装置
CN110928905B (zh) 一种数据处理方法和装置
WO2021030170A1 (en) Normalizing messaging flows, optimizing messaging flows, and virtual programming in a microservice architecture
CN114168626A (zh) 一种数据库操作的处理方法、装置、设备及介质
CN111290842A (zh) 一种任务执行方法和装置
CN110245027B (zh) 一种进程间通信的方法和设备
CN110825342B (zh) 存储调度器件和用于处理信息的***、方法及装置
CN112748855B (zh) 处理高并发数据请求的方法和装置
CN112711485A (zh) 一种消息处理方法和装置
CN113778700A (zh) 消息处理方法、***、介质和计算机***
CN112182003A (zh) 一种数据同步方法和装置
CN113760487A (zh) 一种业务处理方法和装置
CN112486421B (zh) 一种数据存储方法、装置、电子设备及存储介质
CN113778659B (zh) 多线程处理方法和装置
CN116069789A (zh) 一种数据查询方法、装置以及计算机可读存储介质
CN117857490A (zh) 消息传输方法、装置、设备及存储介质
CN118277122A (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