CN112416977B - 应用于数据库的数据传输的方法、装置和设备 - Google Patents
应用于数据库的数据传输的方法、装置和设备 Download PDFInfo
- Publication number
- CN112416977B CN112416977B CN202011300687.2A CN202011300687A CN112416977B CN 112416977 B CN112416977 B CN 112416977B CN 202011300687 A CN202011300687 A CN 202011300687A CN 112416977 B CN112416977 B CN 112416977B
- Authority
- CN
- China
- Prior art keywords
- transaction
- client
- execution
- result
- sent
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 67
- 230000005540 biological transmission Effects 0.000 title claims abstract description 36
- 238000004590 computer program Methods 0.000 claims description 3
- 230000008569 process Effects 0.000 description 17
- 238000010586 diagram Methods 0.000 description 14
- 230000008859 change Effects 0.000 description 7
- 230000009471 action Effects 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000006872 improvement Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
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/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Computer And Data Communications (AREA)
Abstract
本公开提供一种应用于数据库的数据传输方法、装置、设备和计算机可读存储介质。该方法包括:服务器接收到客户端发送的第一执行命令,第一执行命令包含批量返回值,其中,第一执行命令用于指示服务器执行第一事务,若当前模式为自动提交模式,且第一事务为单语句事务,执行第一事务,得到执行结果,根据所述批量返回值,向客户端发送第一执行结果。使得对于批量提交模式下的单语句事务,服务器无需一次将全部的结果数据发送给客户端,而是能够按照客户端发送的批量返回值,发送第一执行结果,从而可以使用较小的网络带宽来传输数据,减轻了传输资源的压力,提高了传输性能。
Description
技术领域
本公开涉及数据库技术领域,尤其涉及一种应用于数据库的数据传输的方法、装置、设备和计算机可读存储介质。
背景技术
随着计算机技术的飞速发展,数据库的应用也越来越广泛,开发者也越来越多,数据库也在朝着对用户更加友好的方向发展。
数据库***执行结构化查询语言(Structured Query Language,简称SQL)语句时,客户端如果指定SQL语句的批量返回值fetchsize,服务器会将结果数据按照该批量返回值分批发送给客户端。然而,在对象-关系postgres数据库中的自动提交模式下,即使客户端指定SQL语句的批量返回值,服务器将结果数据一次全部发送给客户端。
这样,自动提交模式下将导致传输结果数据占用大量的网络带宽。
发明内容
为了解决上述技术问题或者至少部分地解决上述技术问题,本公开提供了一种应用于数据库的数据传输的方法、装置、设备和计算机可读存储介质。
第一方面,本公开提供了一种应用于数据库的数据传输的方法,应用于对象-关系数据库,所述方法包括:
接收客户端发送的第一执行命令,所述第一执行命令包含批量返回值,其中,所述第一执行命令用于指示服务器发送所述第一事务的第一执行结果;
若当前模式为自动提交模式,且所述第一事务为单语句事务,执行所述第一事务,得到执行结果;
根据所述批量返回值,向所述客户端发送第一执行结果。
可选的,所述执行结果中包含至少一条结果数据,所述执行所述第一事务,得到执行结果,包括:
执行所述第一事务,直到得到的结果数据的数量等于批量返回值,
或者,
直到执行完所述第一事务,且得到的结果数据的数量小于批量返回值;所述第一执行结果为所述得到的结果数据。
可选的,所述根据所述批量返回值,向所述客户端发送第一执行结果之前,还包括:
判断当前是否得到了全部的所述第一事务的结果数据;
若当前已经得到了全部的所述第一事务的结果数据,结束所述第一事务;
若当前未得到全部的所述第一事务的结果数据,等待接收客户端发送的第二执行命令,所述第二执行命令用于指示所述服务器继续按照批量返回值,发送所述第一事务的第二执行结果。
可选的,所述执行所述第一事务,得到执行结果,包括:
执行所述第一事务,得到全部的所述第一事务的结果数据,所述全部的所述第一事务的结果数据的数量大于等于所述第一执行结果;
所述向所述客户端发送所述第一执行结果之前,还包括:
根据所述全部的所述第一事务的结果数据的数量与第一执行结果的数量,判断若此次发送了第一执行结果以后是否将全部的所述第一事务的结果数据发送给客户端;
若此次发送了第一执行结果以后已经将全部的所述第一事务的结果数据发送给客户端,则结束所述第一事务;
若当前未将全部的所述第一事务的结果数据发送给客户端,等待接收客户端发送的第二执行命令,所述第二执行命令用于指示所述服务器继续按照批量返回值,发送所述第一事务的第二执行结果。
可选的,所述方法还包括:
若接收到所述客户端发送的第三执行命令,存储未发送给客户端的所述第一事务的结果数据,其中,第三执行命令用于指示所述服务器执行第二事务。
可选的,所述存储未发送给客户端的所述第一事务的结果数据之后,还包括:
接收所述客户端发送的第四执行命令,所述第四执行命令用于指示所述服务器按照批量返回值发送所述第一事务的第三执行结果;
根据所述批量返回值和存储的所述未发送给客户端的所述第一事务的结果数据,得到第三执行结果;
向客户端发送所述第三执行结果。
可选的,所述方法还包括:
接收到所述客户端发送的第一事务的结束命令,提交所述第一事务。
第二方面,本公开提供了一种应用于数据库的数据传输的装置,应用于对象-关系数据库,所述装置包括:
接收模块,用于接收客户端发送的第一执行命令,所述第一执行命令包含批量返回值,其中,所述第一执行命令用于指示服务器发送所述第一事务的第一执行结果;
得到模块,用于若当前模式为自动提交模式,且所述第一事务为单语句事务,执行所述第一事务,得到执行结果;
发送模块,用于根据所述批量返回值,向所述客户端发送第一执行结果。
可选的,所述执行结果中包含至少一条结果数据,所述得到模块具体用于:
执行所述第一事务,直到得到的结果数据的数量等于批量返回值,
或者,
直到执行完所述第一事务,且得到的结果数据的数量小于批量返回值;所述第一执行结果为所述得到的结果数据。
可选的,所述装置还包括:
判断模块,用于判断当前是否得到了全部的所述第一事务的结果数据;
若当前已经得到了全部的所述第一事务的结果数据,结束所述第一事务;
若当前未得到全部的所述第一事务的结果数据,等待接收客户端发送的第二执行命令,所述第二执行命令用于指示所述服务器继续按照批量返回值,发送所述第一事务的第二执行结果。
可选的,所述得到模块具体用于:
执行所述第一事务,得到全部的所述第一事务的结果数据,所述全部的所述第一事务的结果数据的数量大于等于所述第一执行结果;
所述装置还包括:
根据所述全部的所述第一事务的结果数据的数量与第一执行结果的数量,判断若此次发送了第一执行结果以后是否将全部的所述第一事务的结果数据发送给客户端;
若此次发送了第一执行结果以后已经将全部的所述第一事务的结果数据发送给客户端,则结束所述第一事务;
若当前未将全部的所述第一事务的结果数据发送给客户端,等待接收客户端发送的第二执行命令,所述第二执行命令用于指示所述服务器继续按照批量返回值,发送所述第一事务的第二执行结果。
可选的,所述装置还包括:
存储模块,用于若接收到所述客户端发送的第三执行命令,存储未发送给客户端的所述第一事务的结果数据,其中,第三执行命令用于指示所述服务器执行第二事务。
可选的,所述接收模块还用于:接收所述客户端发送的第四执行命令,所述第四执行命令用于指示所述服务器按照批量返回值发送所述第一事务的第三执行结果;
所述得到模块还用于:根据所述批量返回值和存储的所述未发送给客户端的所述第一事务的结果数据,得到第三执行结果;
所述发送模块还用于:向客户端发送所述第三执行结果。
可选的,所述接收模块还用于:接收到所述客户端发送的第一事务的结束命令,提交所述第一事务。
第三方面,本公开提供一种应用于数据库的数据传输设备,包括:
存储器,用于存储处理器可执行指令的存储器;
处理器,用于在计算机程序被执行时,实现如上述第一方面所述的方法。
第四方面,本公开提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如上述第一方面所述的应用于数据库的数据传输的方法。
本公开实施例提供的技术方案与现有技术相比具有如下优点:
服务器接收到客户端发送的第一执行命令,第一执行命令包含批量返回值,其中,第一执行命令用于指示服务器执行第一事务,若当前模式为自动提交模式,且第一事务为单语句事务,执行第一事务,根据所述批量返回值,得到第一执行结果,向客户端发送第一执行结果。使得对于批量提交模式下的单语句事务,服务器无需一次将全部的结果数据发送给客户端,而是能够按照客户端发送的批量返回值,发送第一执行结果,从而可以使用较小的网络带宽来传输数据,减轻了传输资源的压力,提高了传输性能。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为一种数据库***的架构示意图;
图2为一种执行SQL语句的事务状态机示意图;
图3为本公开提供的一种自动提交模式下单语句事务的执行流程示意图;
图4为本公开提供的一种执行SQL语句的事务状态机示意图;
图5为本公开实施例提供的一种应用于数据库的数据传输的方法的流程示意图;
图6为本公开实施例提供的另一种应用于数据库的数据传输的方法的流程示意图;
图7为本公开提供的一种自动提交模式下单语句事务的执行流程示意图;
图8为本公开实施例提供的一种应用于数据库的数据传输的装置的结构示意图;
图9为本公开实施例提供的一种应用于数据库的数据传输的设备的结构示意图。
具体实施方式
为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
首先对本公开的涉及到的名词进行解释。
事务(transaction):是指访问并可能操作各种数据项的一个数据库操作序列,这些数据库操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。
结构化查询语言(Structured Query Language,简称SQL),是指一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理数据库***。
图1为一种应用于数据库的数据库***的架构示意图,下面结合图1说明本发明具体的应用场景,如图1所示,数据库***包括客户端和服务器,客户端与服务器连接,其中,客户端可以为一个或多个,数据库为一个服务器,数据库也可以为多个服务器组成的数据库集群,对此本申请不做限定。
在postgres数据库的查询场景下,客户端向服务器发送查询命令,其中查询命令包括SQL语句以及对SQL语句进行处理的命令集,服务器对接收到的查询命令中的该SQL语句按照客户端发送的命令集进行相应的处理。对SQL语句进行处理的命令集可以包括但不限于以下一种或多种:解析命令、绑定命令、解释命令、执行命令、同步命令,解析命令用于指示服务器对SQL语句进行词法、语法、语义解析;绑定命令用于指示服务器绑定参数,确定执行计划;解释命令用于向服务器说明需要返回元组的描述信息,例如,元组的描述信息可以为目标列的列表、对应的类型等;执行命令用于指示服务器执行语句并返回结果数据;同步命令用于指示服务器关闭当前事务。针对上述命令集中的命令,客户端需按照解析命令、绑定命令、解释命令、执行命令、同步命令的顺序发送给服务器,其中,客户端可以一次发送一个或多个命令给服务器。
图2为一种执行SQL语句的事务状态机示意图,如图2所示,图2中示出了事务的不同状态以及不同状态之间切换的情况,状态201-208的标号分别表示事务的不同状态,条件1-7分别表示各个状态切换条件,其中,条件1为开始事务命令,条件2为提交事务命令,条件3为中止当前事务,条件4为开始事务块,条件5为结束事务块,条件6为用户中止事务块,条件7为中止任何事务,事务的各个状态之间的连线表示事务可以从一种状态切换到另一种状态,直线上的条件1-7表示状态切换条件,也就是接收到该条件标号所表示的条件命令,则切换状态,其中,一条直线上的如果有多个条件,该多个条件满足其中一个条件的情况下,便可以切换状态,箭头所指的事务块为切换到的另一种状态。其中,事务块_开始201表示开始事务块,事务_开始202表示开始事务,事务块_默认203表示事务执行结束以后恢复到默认的状态,事务块_正在处理204表示正在执行当前事务,事务块_中止205表示当前事务块处于中止的状态,事务块_结束206表示当前事务块结束,事务块_中止_结束207表示当前事务块结束了中止的状态,事务块_中止_等待208表示当前事务块中止后进入到结束的状态。
执行SQL语句的事务时,事务的状态变化一般是从事务块_默认203开始,直到事务块_默认203结束,在非自动提交模式下,事务的状态变化过程一般是从事务_开始202开始,然后切换到事务块_开始201,再经过中间的过程(可能包括事务块_正在处理204,事务块_中止205,事务块_结束206,和或,事务块_中止_结束207),最终到状态变化为事务块_默认203。在自动提交模式下,事务的状态变化过程一般是从事务_开始202开始,到状态变化为事务块_默认203,其中如果接受到中止命令,会切换到事务块_中止_等待208,最终状态变化为事务块_默认203,整个事务块结束。
在数据库中,用户可以在客户端设置SQL语句的批量返回值fetchsize,客户端向服务器发送执行命令时会将批量返回值一起发送给服务器,服务器接收到客户端发送的执行命令以后,执行第一事务,得到结果数据,服务器按照该批量返回值将结果数据分批发送给客户端。
然而,在对象-关系postgres数据库中,在自动提交模式下的单语句事务中,服务器在向客户端发送执行结果时,将所有的结果数据一次全部发送给客户端,然后提交该事务,也就是说,即使用户在客户端设置了SQL语句的批量返回值,客户端也不会将该批量返回值发送给服务器,或者即使客户端将批量返回值发送给服务器,服务器的执行机制中也无法对该批量返回值进行处理,服务器仍然是按照原有的机制将所有的结果数据一次全部发送给客户端,然而,这样会占用较大的网络带宽去传输结果数据,降低了传输性能。
本公开提供的数据传输的方法,旨在解决现有技术的如上技术问题。服务器接收到客户端发送的包含批量返回值的第一执行命令,若当前模式为自动提交模式,且第一事务为单语句事务,执行第一事务,得到执行结果,根据批量返回值,向客户端发送第一执行结果。从而使得在postgres数据库中的自动提交模式下,服务器可以按照客户端发送的批量返回值,将第一执行结果发送给客户端,从而可以使用较小的网络带宽来传输数据,减轻了传输资源的压力,提高传输性能。
图3为本公开提供的一种自动提交模式下单语句事务的执行流程示意图,如图3所示,按照时间顺序,接收到不同的命令报文以后,执行命令报文相应的步骤。
图4为本公开提供的一种执行SQL语句的事务状态机示意图,如图4所示,图4是在图2所示状态机的基础上进行的改进,增加了状态事务块_批量返回209,相应的增加了条件8和条件9,其中,条件8为开始批量发送事务,条件9为结束批量发送事务。201-209分别表示事务的不同状态,条件1-9分别表示各个状态切换条件,各个事务的状态之间的连线表示从一种状态切换到另一种状态,直线上的1-9之间任一或多个标号表示状态切换的条件,箭头所指的事务块为切换到的状态。事务块_批量返回209表示按照批量返回值,向客户端发送事务的第一执行结果,服务器在每次向客户端发送一次执行结果之前,都进行判断此次若发送给客户端结果数据之后是否将全部的第一事务的结果数据发送给客户端,若并未将全部的第一事务的结果数据发送给客户端,则状态停留在事务块_批量返回209,若已经将全部的第一事务的结果数据发送给客户端,则状态切换到事务块_结束206。另外,因增加了事务块_批量返回209的状态,因此增加了中断等事务的情况,使得事务状态机完整。
在服务器接收到解析命令以后,事务状态变更301步骤中,将当前事务状态变更为图2中所示的事务_开始202。在服务器接收到执行命令以后,事务状态变更302步骤中,服务器每次给客户端按照批量返回值返回结果数据之前,可以进行判断此次发送给客户端结果数据之后,是否已经将全部的当前事务的结果数据发送给客户端,如果未将全部的当前事务的结果数据发送给客户端,则将当前事务状态变更为批量返回处理流程,事务状态切换为事务块_批量返回209。
下面以具体地实施例对本公开的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。
图5为本公开实施例提供的一种应用于数据库的数据传输的方法的流程示意图,如图5所示,本实施例的方法由服务器执行,本实施例的方法如下:
S501、接收客户端发送的第一执行命令。
其中,第一执行命令包含批量返回值,第一执行命令用于指示服务器发送第一事务的第一执行结果。
客户端在有查询任务时,向服务器发送查询命令,其中,查询命令可以包括解析命令,在客户端执行了对SQL语句的解析以后,再将需要服务器进一步执行的命令全部或者分别发送给服务器,进一步执行的命令可以包括但不限于:绑定命令、解释命令、执行命令;查询命令还可以包括第一执行命令。
第一执行命令中包含批量返回值,该批量返回值用于指示服务器按照该批量返回值将结果数据发送给客户端,例如,批量返回值为5,则服务器可以向客户端发送5条结果数据。
S502、判断是否当前模式为自动提交模式,且第一事务为单语句事务。
单语句事务,为将一个SQL语句划分为一个事务进行处理,一个SQL语句执行完成以后则提交当前的事务。服务器检测当前模式以及第一事务的性质,判断当前模式是否为自动提交模式,且第一事务是否为单语句事务,如果当前模式不是自动提交模式,和/或,第一事务不是单语句事务,则按照现有的流程进行处理,相应的服务器可以按照图4所示状态机进行切换状态,如果当前模式是自动提交模式,且第一事务是单语句事务则继续执行S503。
S503、执行第一事务,得到执行结果。
S504、根据批量返回值,向客户端发送第一执行结果。
一种可能的实现方式中,执行完成第一事务从而得到全部的第一事务的结果数据,其中,全部的第一事务的结果数据为执行完成第一事务得到的全部的结果数据,全部的第一事务的结果数据的数量大于等于第一执行结果。再根据批量返回值,得到第一执行结果。
如果全部的第一事务的结果数据为0条,即执行完成第一事务并未得到结果数据,则第一执行结果即为该第一事务没有结果数据,向客户端发送该第一执行结果。
如果全部的第一事务的结果数据的数量不为0,且小于等于批量返回值,第一执行结果包含全部的结果数据。例如,假设服务器执行第一事务,获得的全部结果数据为10条,批量返回值为20,则第一执行结果为全部的10条结果数据,向客户端发送第一执行结果。
如果全部的第一事务的结果数据的数量大于批量返回值,则第一执行结果中包含批量返回值数量的结果数据。例如,假设批量返回值为20,如果服务器执行第一事务,获得的全部结果数据为40条,则第一执行结果中包含40条结果数据中的20条结果数据。
另一种可能的实现方式中,服务器按照批量返回值执行第一事务,得到数量小于等于批量返回值的结果数据,第一执行结果中包含得到的结果数据。
可选的,执行第一事务,直到得到的结果数据的数量等于批量返回值,
或者,
直到执行完第一事务,且得到的结果数据的数量小于批量返回值。
例如,执行第一事务的过程中,可以对得到的结果数据进行计数,每得到一条结果数据,计数值加一,直到计数值达到批量返回值,则暂停执行第一事务,将此时已经得到的结果数据组成第一执行结果。其中,如果在执行的过程中,执行完第一事务得到全部的第一事务的结果数据的数量小于批量返回值,则第一执行结果中包含全部的第一事务的结果数据。
通过服务器按照批量返回值执行第一事务,使得服务器在得到第一执行结果以后,如果客户端不再请求第一事务的结果数据,可以不再继续执行第一事务,从而减小了服务器的CPU消耗,节省了服务器的计算处理资源。
本实施例,服务器接收到客户端发送的第一执行命令,第一执行命令包含批量返回值,其中,第一执行命令用于指示服务器执行第一事务,若当前模式为自动提交模式,且第一事务为单语句事务,执行第一事务,根据批量返回值,得到第一执行结果,向客户端发送第一执行结果。使得对于批量提交模式下的单语句事务,服务器无需一次将全部的结果数据发送给客户端,而是能够按照客户端发送的批量返回值,发送第一执行结果,从而可以使用较小的网络带宽来传输数据,减轻了传输资源的压力,提高了传输性能。
在上述实施例的基础上,进一步地,步骤S504之后,还包括:
判断当前是否将全部的第一事务的结果数据发送给客户端。
一种可能的实现方式中,如果执行第一事务得到了全部的第一事务的结果数据,则根据全部的第一事务的结果数据的数量与第一执行结果的数量,判断当前是否将全部的第一事务的结果数据发送给客户端。例如,全部的第一事务的结果数据的数量与第一执行结果的数量相同,则确定当前已经将全部的第一事务的结果数据发送给客户端,服务器可以结束第一事务,事务状态切换为图4所示的事务块_结束206。全部的第一事务的结果数据的数量多于第一执行结果的数量,则确定当前还未将全部的第一事务的结果数据发送给客户端,则不提交第一事务,也就是说并不将第一事务结束,事务状态切换为图4所示的事务块_批量返回209,服务器继续等待客户端发送第二执行命令,第二执行命令用于指示服务器继续按照批量返回值,发送第一事务的第二执行结果。
另一种可能的实现方式中,如果执行第一事务,得到了批量返回值数量的结果数据,则暂停执行第一事务,判断若此次发送了第一事务的结果数据以后是否将全部的第一事务的结果数据发送给客户端,然后将得到的结果数据组成第一执行结果发送给客户端。例如,可以根据当前第一事务是否执行完,判断当前是否将全部的第一事务的结果数据发送给客户端,若第一事务还未执行完,则当前未将全部的第一事务的结果数据发送给客户端(其中,也存在还未执行的第一事务可能并不能得到结果数据的情况,此时服务器也可以认为当前未将全部的第一事务的结果数据发送给客户端),则服务器不提交第一事务,也就是说并不将第一事务结束,事务状态切换为图4所示的事务块_批量返回209。若第一事务已经执行完成,则当前已经将全部的第一事务的结果数据发送给客户端,服务器可以结束第一事务,事务状态切换为图4所示的事务块_结束206。
进一步地,在S504之后,若当前还未将全部的第一事务的结果数据发送给客户端,则第一事务并未结束,在客户端再次发送请求数据的命令时,再按照批量返回值和未发送给客户端的第一事务的结果数据,向客户端发送第二执行结果。下面以图6所示实施例进行详细说明。
图6为本公开实施例提供的另一种应用于数据库的数据传输的方法的流程示意图,图6是在图5所示实施例的基础上,进一步地,如图6所示,若当前还未将全部的第一事务的结果数据发送给客户端,S504之后还可以包括S505、S506和S507:
S505、接收到客户端发送的第二执行命令。
其中,第二执行命令用于指示服务器继续按照批量返回值,发送第一事务的第二执行结果。
S506、按照批量返回值和未发送给客户端的第一事务的结果数据,得到第二执行结果。
S507、向客户端发送第二执行结果。
第一事务的结果数据的数量可能比批量返回值多,则在S504中发送的第一执行结果中并未包含全部的第一事务的结果数据,在客户端每次发送第二执行命令时,将当前未发送给客户端的第一事务的结果数据,按照批量返回值,得到第二执行结果,然后发送给客户端。
例如,批量返回值为5,服务器执行完第一事务以后得到20条结果数据,则将20条结果数据中的5条结果数据发送给客户端,然后每次接收到客户端发送的第二执行命令以后,继续将还未发送给客户端的5条结果数据发送给客户端。
再例如,批量返回值为5,则服务器可以在执行第一事务的过程中,将5条结果数据发送给客户端,然后每次接收到客户端发送的第二执行命令以后,继续执行第一事务,得到5条结果数据,再发送给客户端。可以理解,若在服务器共发送了上述10条结果数据(发送了2次)以后,若客户端没有再发送返回第一执行结果的命令,则服务器不会继续执行第一事务。
本实施例,服务器可以在接收到客户端的第二执行命令以后,再按照批量返回值发送第二执行结果,则在第一事务的结果数据需要多次才能给客户端发送完的情况下,按照客户端发送的第二执行命令进行发送结果数据,从而可以使用较小的网络带宽来传输数据,减轻了传输资源的压力,提高了传输性能。
在上述实施例的基础上,进一步地,步骤S507之后,还包括:
判断当前是否将全部的第一事务的结果数据发送给客户端。
若当前已经将全部的第一事务的结果数据发送给客户端,服务器可以结束第一事务。若当前还未将全部的第一事务的结果数据发送给客户端,则不提交第一事务,也就是说并不将第一事务结束,事务状态停留在图4所示的事务块_批量返回209。
在一些场景中,服务器在执行上述步骤的过程中,也就是还未结束第一事务时,需要停止向客户端发送第一事务的结果数据。
一种可能的场景中,若接收到客户端发送的第三执行命令,停止向客户端分批发送第一事务的结果数据,存储未发送给客户端的第一事务的结果数据,其中,第三执行命令用于指示服务器执行第二事务。
若在服务器执行第一事务,并按照批量返回值发送结果数据的过程中,此时接收到客户端发送的新语句的第二事务的第三执行命令,则客户端需要存储还未发送给客户端的第一事务的结果数据,事务状态切换为图4所示的事务块_结束206。如果此时已经执行完第一事务,则直接存储未发送给客户端的第一事务的结果数据;如果此时未执行完第一事务,则继续执行第一事务,直到完成第一事务的执行后,存储未发送给客户端的第一事务的结果数据。
可选的,存储未发送给客户端的第一事务的结果数据的同时或之后提交第一事务,事务状态切换为图4所示的事务块_默认203,服务器可以开始执行第二事务。
可选的,在存储未发送给客户端的第一事务的结果数据之后,还可以包括:接收客户端发送的第四执行命令,第四执行命令用于指示服务器继续按照批量返回值发送第一事务的第三执行结果。根据批量返回值,和存储的未发送给客户端的第一事务的结果数据,得到第三执行结果,向客户端发送第三执行结果。
存储未发送给客户端的第一事务的结果数据之后,在第一事务的语句关闭之前,都可以按照第四执行命令发送存储的未发送给客户端的第一事务的结果数据。接收第四执行命令的情况包括但不限于如下情况:
情况一、执行第二事务的过程中;
情况二、执行完第二事务并提交第二事务之后;
情况三、执行除第二事务以外的其他事务的过程中。
可选的,存储未发送给客户端的第一事务的结果数据之后,可以在向客户端发送了该未发送给客户端的第一事务的结果数据以后,删除该未发送给客户端的第一事务的结果数据,也可以设置存储未发送的结果数据的时长,达到存储未发送的结果数据的时长以后,删除该未发送的第一事务的结果数据,还可以设置存储未发送的结果数据的空间大小或者数量,当达到设置的结果数据的空间大小或者数量以后,按照存储的时间顺序删除结果数据,还可以按照其他方式删除未发送给客户端的第一事务的结果数据,对此本申请不做限定。
可选的,在S503之后,还包括:设置批量返回标志位,其中,批量返回标志位用于表示服务器当前在执行第一事务,并且进入到了批量返回流程中,即服务器每次给客户端按照批量返回值返回结果数据之前,可以进行判断此次发送给客户端结果数据之后,是否将全部的当前事务的结果数据发送给客户端,若未将全部的当前事务的结果数据发送给客户端,则设置批量返回标志位,如图4所示的事务状态切换到事务块_批量返回209。相应的,在S504之后,在提交了第一事务以后,还包括:删除设置的批量返回标志位。
在服务器接收到SQL语句的第三执行命令时,查看当前是否设置了批量返回标志位,若未设置批量返回标志位,则执行第三执行命令,若设置了批量返回标志位,说明当前正在执行第一事务,则需要存储未发送给客户端的第一事务的结果数据,然后再执行该SQL语句对应的第二事务。通过批量返回标志位的设置,在服务器接收到一个新语句时,可以通过批量返回标志位,快速确定当前服务器是否在执行第一事务,且第一事务是否在批量返回发送结果数据的过程中,即第一事务的结果数据还未全部发送完成。
本实施例,服务器在向客户端分批发送第一执行结果的过程中,若接收到客户端发送的第三执行命令,停止向客户端分批发送第一事务的结果数据,存储未发送给客户端的第一事务的结果数据,其中,第三执行命令用于指示服务器执行第二事务。则在客户端下次请求第一事务的结果数据时,服务器无需再执行第一事务,直接按照批量返回值,将存储的未发送给客户端的结果数据发送给客户端,减小了服务器的CPU消耗,节省了服务器的计算处理资源。
另一种可能的场景中,若接收到客户端发送的第一事务的结束命令,停止向客户端发送第一事务的第一执行结果。
若服务器按照批量返回值发送第一事务的结果数据的过程中,此时接收到客户端发送的第一事务的结束命令,则停止向客户端分批发送第一事务的第一执行结果,并提交第一事务。
本实施例,服务器接收到客户端发送的第一事务的结束命令,停止向客户端发送第一事务的结果数据,保证服务器按照客户端的指示命令执行相应的步骤。
可选的,服务器按照批量返回值执行第一事务,直到得到的结果数据的数量等于批量返回值,则服务器不再继续执行第一事务,再下一次收到客户端发送的返回命令以后,继续执行第一事务,从而在接收到客户端发送的第一事务的结束命令以后,结束第一事务,例如,全部的第一事务的结果数据有1万条,批量返回值为5,则服务器执行第一事务,直到得到5条结果数据,就不再继续执行第一事务,向客户端发送该得到的5条结果数据,如果此时客户端只需要使用5条结果数据,客户端已经得到了5条结果数据,则客户端向服务器发送第一事务的结束命令,服务器无需再对还未执行完的第一事务继续执行,而是直接结束第一事务。这样,服务器实现了按需执行,节省了服务器的CUP资源。
下面结合图4和图7对本公开提供的自动提交模式下单语句事务的执行流程进行说明,图7为本公开提供的一种自动提交模式下单语句事务的执行流程示意图,如图7所示,按照时间顺序,事务状态切换到事务块_批量返回209时,设置批量返回标志位,则在开始第一事务以后,如果接收到新语句,则服务器判断是否存在批量返回标志位,如果设置了批量返回标志位则存储未发送给客户端的第一事务的结果数据,然后提交第一事务。在每次服务器向客户端发送了结果数据以后,都进行判断当前的第一事务的结果数据是否已经全部发送给客户端,如果已经全部发送给客户端,则提交第一事务,如果还未全部发送给客户端,则需要保存当前的与客户端传输数据的接口portal,以使之后还可以继续向客户端发送未发送给客户端的第一事务的结果数据。
图8为本公开实施例提供的一种应用于数据库的数据传输的装置的结构示意图,如图8所示,本实施例提供的装置应用于对象-关系数据库,包括:
接收模块801,用于接收客户端发送的第一执行命令,第一执行命令包含批量返回值,其中,第一执行命令用于指示服务器发送第一事务的第一执行结果;
得到模块802,用于若当前模式为自动提交模式,且第一事务为单语句事务,执行第一事务,得到执行结果;
发送模块803,用于根据批量返回值,向客户端发送第一执行结果。
可选的,执行结果中包含至少一条结果数据,得到模块具体用于:
执行第一事务,直到得到的结果数据的数量等于批量返回值,
或者,
直到执行完第一事务,且得到的结果数据的数量小于批量返回值;第一执行结果为得到的结果数据。
可选的,装置还包括:
判断模块,用于判断当前是否得到了全部的第一事务的结果数据;
若当前已经得到了全部的第一事务的结果数据,结束第一事务;
若当前未得到全部的第一事务的结果数据,等待接收客户端发送的第二执行命令,第二执行命令用于指示服务器继续按照批量返回值,发送第一事务的第二执行结果。
可选的,得到模块802具体用于:
执行第一事务,得到全部的第一事务的结果数据,全部的第一事务的结果数据的数量大于等于第一执行结果;
装置还包括:
根据全部的第一事务的结果数据的数量与第一执行结果的数量,判断若此次发送了第一执行结果以后是否将全部的第一事务的结果数据发送给客户端;
若此次发送了第一执行结果以后已经将全部的第一事务的结果数据发送给客户端,则结束第一事务;
若当前未将全部的第一事务的结果数据发送给客户端,等待接收客户端发送的第二执行命令,第二执行命令用于指示服务器继续按照批量返回值,发送第一事务的第二执行结果。
可选的,装置还包括:
存储模块,用于若接收到客户端发送的第三执行命令,存储未发送给客户端的第一事务的结果数据,其中,第三执行命令用于指示服务器执行第二事务。
可选的,接收模块还用于:接收客户端发送的第四执行命令,第四执行命令用于指示服务器按照批量返回值发送第一事务的第三执行结果;
得到模块还用于:根据批量返回值和存储的未发送给客户端的第一事务的结果数据,得到第三执行结果;
发送模块还用于:向客户端发送第三执行结果。
可选的,接收模块还用于:接收到客户端发送的第一事务的结束命令,提交第一事务。
上述实施例的装置,可以用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图9为本公开实施例提供的一种应用于数据库的数据传输的设备的结构示意图,如图9所示,本实施例提供的设备包括:
存储器901,用于存储处理器可执行指令的存储器;
处理器902,用于在计算机程序被执行时,实现如上述任一数据传输的方法。
上述实施例的设备,可以用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
本公开实施例提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,计算机执行指令被处理器执行时用于实现如上述任一数据传输的方法。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种应用于数据库的数据传输的方法,其特征在于,应用于对象-关系数据库,所述方法包括:
接收客户端发送的第一执行命令,所述第一执行命令包含批量返回值,其中,所述第一执行命令用于指示服务器发送第一事务的第一执行结果;
若当前模式为自动提交模式,且所述第一事务为单语句事务,执行所述第一事务,得到执行结果;
根据所述批量返回值,向所述客户端发送第一执行结果。
2.根据权利要求1所述的方法,其特征在于,所述执行结果中包含至少一条结果数据,所述执行所述第一事务,得到执行结果,包括:
执行所述第一事务,直到得到的结果数据的数量等于批量返回值,
或者,
直到执行完所述第一事务,且得到的结果数据的数量小于批量返回值;所述第一执行结果为所述得到的结果数据。
3.根据权利要求2所述的方法,其特征在于,所述根据所述批量返回值,向所述客户端发送第一执行结果之前,还包括:
判断当前是否得到了全部的所述第一事务的结果数据;
若当前已经得到了全部的所述第一事务的结果数据,结束所述第一事务;
若当前未得到全部的所述第一事务的结果数据,等待接收客户端发送的第二执行命令,所述第二执行命令用于指示所述服务器继续按照批量返回值,发送所述第一事务的第二执行结果。
4.根据权利要求1所述的方法,其特征在于,所述执行所述第一事务,得到执行结果,包括:
执行所述第一事务,得到全部的所述第一事务的结果数据,所述全部的所述第一事务的结果数据的数量大于等于所述第一执行结果;
所述向所述客户端发送所述第一执行结果之前,还包括:
根据所述全部的所述第一事务的结果数据的数量与第一执行结果的数量,判断若此次发送了第一执行结果以后是否将全部的所述第一事务的结果数据发送给客户端;
若此次发送了第一执行结果以后已经将全部的所述第一事务的结果数据发送给客户端,则结束所述第一事务;
若当前未将全部的所述第一事务的结果数据发送给客户端,等待接收客户端发送的第二执行命令,所述第二执行命令用于指示所述服务器继续按照批量返回值,发送所述第一事务的第二执行结果。
5.根据权利要求1-4任一项所述的方法,其特征在于,还包括:
若接收到所述客户端发送的第三执行命令,存储未发送给客户端的所述第一事务的结果数据,其中,第三执行命令用于指示所述服务器执行第二事务。
6.根据权利要求5所述的方法,其特征在于,所述存储未发送给客户端的所述第一事务的结果数据之后,还包括:
接收所述客户端发送的第四执行命令,所述第四执行命令用于指示所述服务器按照批量返回值发送所述第一事务的第三执行结果;
根据所述批量返回值和存储的所述未发送给客户端的所述第一事务的结果数据,得到第三执行结果;
向客户端发送所述第三执行结果。
7.根据权利要求1-4任一项所述的方法,其特征在于,还包括:
接收到所述客户端发送的第一事务的结束命令,提交所述第一事务。
8.一种应用于数据库的数据传输的装置,其特征在于,包括:
接收模块,用于接收客户端发送的第一执行命令,所述第一执行命令包含批量返回值,其中,所述第一执行命令用于指示服务器发送第一事务的第一执行结果;
得到模块,用于若当前模式为自动提交模式,且所述第一事务为单语句事务,执行所述第一事务,得到执行结果;
发送模块,用于根据所述批量返回值,向所述客户端发送所述第一执行结果。
9.一种应用于数据库的数据传输设备,其特征在于,包括:
存储器,用于存储处理器可执行指令的存储器;
处理器,用于在计算机程序被执行时,实现如上述权利要求1至7中任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如权利要求1至7任一项所述的应用于数据库的数据传输的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011300687.2A CN112416977B (zh) | 2020-11-19 | 2020-11-19 | 应用于数据库的数据传输的方法、装置和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011300687.2A CN112416977B (zh) | 2020-11-19 | 2020-11-19 | 应用于数据库的数据传输的方法、装置和设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112416977A CN112416977A (zh) | 2021-02-26 |
CN112416977B true CN112416977B (zh) | 2023-12-19 |
Family
ID=74774470
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011300687.2A Active CN112416977B (zh) | 2020-11-19 | 2020-11-19 | 应用于数据库的数据传输的方法、装置和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112416977B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2001016704A2 (en) * | 1999-08-31 | 2001-03-08 | Accenture Llp | System, method, and article of manufacture for a request sorter in a transaction services patterns environment |
CN110427427A (zh) * | 2019-08-02 | 2019-11-08 | 北京快立方科技有限公司 | 一种通过引脚桥接实现全局事务分布式处理方法 |
CN110688397A (zh) * | 2019-07-30 | 2020-01-14 | 民生科技有限责任公司 | 一种基于sql的分布式数据统一访问***及方法 |
US10565203B1 (en) * | 2017-03-31 | 2020-02-18 | Intuit Inc. | Object relational mapper for non-relational databases |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8965860B2 (en) * | 2010-04-01 | 2015-02-24 | Salesforce.Com, Inc. | Methods and systems for bulk uploading of data in an on-demand service environment |
US11068506B2 (en) * | 2016-05-10 | 2021-07-20 | Sap Se | Selective dispatching of OLAP requests using execution statistics |
US11573965B2 (en) * | 2016-09-15 | 2023-02-07 | Oracle International Corporation | Data partitioning and parallelism in a distributed event processing system |
-
2020
- 2020-11-19 CN CN202011300687.2A patent/CN112416977B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2001016704A2 (en) * | 1999-08-31 | 2001-03-08 | Accenture Llp | System, method, and article of manufacture for a request sorter in a transaction services patterns environment |
US10565203B1 (en) * | 2017-03-31 | 2020-02-18 | Intuit Inc. | Object relational mapper for non-relational databases |
CN110688397A (zh) * | 2019-07-30 | 2020-01-14 | 民生科技有限责任公司 | 一种基于sql的分布式数据统一访问***及方法 |
CN110427427A (zh) * | 2019-08-02 | 2019-11-08 | 北京快立方科技有限公司 | 一种通过引脚桥接实现全局事务分布式处理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN112416977A (zh) | 2021-02-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11681684B2 (en) | Client-driven commit of distributed write transactions in a database environment | |
US10474645B2 (en) | Automatically retrying transactions with split procedure execution | |
US8694733B2 (en) | Slave consistency in a synchronous replication environment | |
CN111433764A (zh) | 全局一致分片式oltp***的高吞吐量分布式事务管理及其实现方法 | |
CN111459418B (zh) | 一种基于rdma的键值存储***传输方法 | |
US20200159596A1 (en) | Implementing multiple content management service operations | |
CN110675255B (zh) | 在区块链中并发执行交易的方法和装置 | |
CN111107022B (zh) | 数据传输优化方法、设备及可读存储介质 | |
US20110185360A1 (en) | Multiprocessing transaction recovery manager | |
CN112883045B (zh) | 数据库事务拆分执行方法及装置 | |
CN111198872A (zh) | 数据库处理事务的方法及装置 | |
CN113421073A (zh) | 在区块链中并发执行交易的方法和装置 | |
CN112416977B (zh) | 应用于数据库的数据传输的方法、装置和设备 | |
US8719316B2 (en) | Write agent delayed write to data stores | |
CN110689344B (zh) | 在区块链中并发执行交易的方法和装置 | |
CN115438025A (zh) | 数据处理方法及装置 | |
CN110543349B (zh) | 一种应用启动加速方法、装置及计算机可读存储介质 | |
CN114528049A (zh) | 一种基于InfluxDB实现API调用信息统计的方法及*** | |
US20090064141A1 (en) | Efficient utilization of transactions in computing tasks | |
CN114385621A (zh) | 一种加锁方法、装置、设备及介质 | |
CN112925807A (zh) | 面向数据库的请求的批处理方法、装置、设备及存储介质 | |
EP3901790A1 (en) | Determining method for a common component of pages, server and storage medium | |
CN112351053B (zh) | 嵌入式数据库的远程访问方法、装置、设备及介质 | |
CN110858918B (zh) | Mds数据获取方法、数字电视及存储介质 | |
CN109857523A (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 |