CN115408414A - 一种处理结构化查询语言sql语句的方法及相应设备 - Google Patents

一种处理结构化查询语言sql语句的方法及相应设备 Download PDF

Info

Publication number
CN115408414A
CN115408414A CN202110596051.5A CN202110596051A CN115408414A CN 115408414 A CN115408414 A CN 115408414A CN 202110596051 A CN202110596051 A CN 202110596051A CN 115408414 A CN115408414 A CN 115408414A
Authority
CN
China
Prior art keywords
sql
sql statement
request
buffer
statements
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
CN202110596051.5A
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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co 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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN202110596051.5A priority Critical patent/CN115408414A/zh
Publication of CN115408414A publication Critical patent/CN115408414A/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/242Query formulation
    • G06F16/2433Query languages
    • G06F16/2448Query languages for particular applications; for extensibility, e.g. user defined types
    • 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/2455Query execution
    • G06F16/24552Database cache management

Landscapes

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

Abstract

本申请公开了一种处理结构化查询语言SQL语句的方法,该方法应用于数据库技术领域,如:客户端与目标数据库交互的场景,或者,源数据库和目标数据库通过逻辑复制工具实现增量数据实时同步的场景,以及其它涉及批量执行SQL的场景。该方法包括:数据库连接组件创建用于关联多个SQL语句的缓冲区,如:PreparedStatement对象;将多个SQL语句填充到缓冲区,并为每个SQL语句绑定对应的参数;向目标数据库发送请求,该请求包括填充到缓冲区的多个SQL语句以及多个SQL语句中每个SQL语句所绑定的参数。本申请方案,可以通过一个请求传输多条SQL语句,减少了网络开销,并且提升了SQL语句执行的效率。

Description

一种处理结构化查询语言SQL语句的方法及相应设备
技术领域
本申请涉及数据库技术领域,具体涉及一种处理结构化查询语言(structuredquery language,SQL)语句的方法及相应设备。
背景技术
目前的数据库与客户端或一个数据库与另一个数据库之间的交互通常采用结构化查询语言(structured query language,SQL)语句。在交互过程中,以客户端为例,客户端每次向数据库发送请求时,都会再该请求中携带一个SQL语句,通过该SQL语句实现对数据库的操作(如增加数据、删除数据或修改数据等操作)。
每次通过一个请求与数据库进行一个SQL语句的交互,在SQL语句较多时,就会存在很多次交互,造成了较大的网络开销。
发明内容
本申请实施例提供一种处理结构化查询语言SQL语句的方法,用于减少网络交互次数以及提升SQL语句执行的效率。本申请实施例还提供了相应的装置、系统、计算机可读存储介质及计算机程序产品等。
本申请第一方面提供一种处理结构化查询语言SQL语句的方法,该方法可以应用于数据库连接组件,该数据库连接组件可以是用于与数据库连接的驱动程序,如:Java数据库连接(Java Database Connectivity,JDBC)驱动程序,该数据库连接组件还可以是与数据库交互的客户端,或者用于实现源数据库和目标数据库之间数据实时同步的逻辑复制工具,或者部署前述客户端或逻辑复制工具的设备,或者作为一个功能单元集成在签署客户端或者逻辑复制工具中。该方法包括:创建用于关联多个SQL语句的缓冲区;将多个SQL语句填充到缓冲区,为多个SQL语句中填充到缓冲区的每个SQL语句绑定对应的参数;其中,每个SQL语句绑定的参数用于指示该SQL语句所操作数据的位置和值;向目标数据库发送请求,该请求包括填充到缓冲区的多个SQL语句以及多个SQL语句中每个SQL语句所绑定的参数。
本申请中对于SQL语句的处理方法也同样适用于基于其它类型的数据语言的语句,例如数据定义语言(data definition language,DDL)语句和数据操纵语言(datamanipulation language,DML)语句。SQL语句可以包括实现数据插入、查询、更新和删除,模式创建和修改,以及数据访问控制的语句、命令或请求。
本申请中,多个SQL语句可以包括两个SQL语句或两个以上SQL语句,也可以描述为至少两个SQL语句。缓冲区可以是内存中的一块资源,缓冲区也可以是一个对象,比如预处理PreparedStatement对象,该对象用于关联多个SQL语句。
本申请中,将SQL语句填充到缓冲区的过程指的是将SQL语句放入或加载至缓存,或者,将SQL语句填充到PreparedStatement对象的过程,例如为对象中的成员或变量赋值。
本申请中,为每个SQL语句绑定对应的参数的过程指的是建立参数与SQL语句联系的过程,如:在位置上,将相应参数配置在该SQL语句的紧相邻的下一行或下几行。
本申请中,客户端可以是硬件(如:终端设备),也可以是软件(如:应用(application,APP))。数据库,例如源数据库和目标数据库,是用于管理数据的系统软件,可以部署在数据库服务器上,该数据库服务器可以是物理机也可以是虚拟机(virtualmachine,VM)或容器(container)。
本申请中,每个SQL语句绑定的参数用于指示对应SQL语句所操作数据的位置和值,其中,位置可以指示表格中的指定行,指定列,或者指定行的指定列,值表示该位置所要插入、修改或删除的数值。
本申请中,也可以将多个SQL语句按照填充到缓冲区的顺序以及所绑定的参数排布好后所得到的数据结构及内容称为SQL语句结构体。
由该第一方面所提供的方案可知,客户端与数据库交互时,或者源数据库通过逻辑复制工具与目标数据库交互时,数据库连接组件可以通过一个请求传输多条SQL语句,减少了网络开销,还提升了SQL语句执行的效率。数据库连接组件通常是一个软件组件,比如诸如JDBC驱动之类的驱动程序,使得应用程序可以与数据库进行交互,或者数据库与数据库之间能够进行交互。
在第一方面的一种可能的实现方式中,每个SQL语句所操作数据的数据条数可以全部相同。在另一种可能的实现方式中,每个SQL语句所操作数据的数据条数也可以不全部相同。
其中,每个SQL语句所操作数据的数据条数可以不全部相同可以理解为:有的SQL语句可以操作一条数据,有的SQL语句可以操作多条数据,有的SQL语句也可以不操作数据,即不需要每个SQL语句操作相同条数的数据。本申请中,每个SQL语句所操作的数据条数可以根据需求设置。本申请中,因为每个SQL语句所操作的数据条数可以是不相同的,这样,SQL语句所对应的数据是灵活的,进一步提升了SQL语句的执行效率。
在第一方面的一种可能的实现方式中,上述步骤:将多个SQL语句填充到缓冲区,为多个SQL语句中填充到缓冲区的每个SQL语句绑定对应的参数,包括:将多个SQL语句中的第一SQL语句填充到缓冲区,并为第一SQL语句绑定第一参数,该第一参数指示第一SQL语句所操作数据的位置和值;将第一SQL语句填充到缓冲区之后,将第二SQL语句填充到缓冲区,并为第二SQL语句绑定第二参数,该第二参数指示第二SQL语句所操作数据的位置和值。
该种可能的实现方式中,在向缓冲区中填充SQL语句时,可以是填充一条SQL语句后,为该条SQL语句绑定参数,在绑定参数时,再异步向缓冲区填充另外一条SQL语句。也可以是填充一条SQL语句后,执行完该条SQL语句的参数绑定,再向缓冲区填充另外一条SQL语句。本申请这种逐个填充SQL语句的方式,有利于保持SQL语句的顺序,便于目标数据库有序执行各条SQL语句。
在第一方面的一种可能的实现方式中,上述步骤:创建用于关联多个SQL语句的缓冲区,包括:通过预处理接口创建关联多个SQL语句的缓冲区,缓冲区包括预处理PreparedStatement对象。
该种可能的实现方式中,可以通过配置私有的预处理接口创建缓冲区,也可以理解为通过私有的预处理接口创建PreparedStatement对象。该种通过私有的预处理接口创建的PreparedStatement对象,在创建该对象时不需要填充SQL语句,也就是解绑了PreparedStatement对象与SQL语句之间的关系,从而提高了后续填充SQL语句的灵活性。
在第一方面的一种可能的实现方式中,上述步骤:将多个SQL语句填充到缓冲区,包括:通过追加接口将多个SQL语句逐个填充到缓冲区。
该种可能的实现方式中,追加接口可以是私有的接口,该私有的追加接口的功能是向缓冲区中填充SQL语句,通过循环的方式可以填充多条SQL语句,从而实现了一个请求中填充批量SQL语句的功能。
在第一方面的一种可能的实现方式中,多个SQL语句的操作类型包括增加、删除或修改中的至少一种。
在第一方面的一种可能的实现方式中,请求中还包括目标消息码,目标消息码指示请求中包含多条SQL语句。
现有技术中,目标数据库可以处理一个请求中包含一个SQL语句的操作。该种可能的实现方式中,考虑到与现有技术的生态兼容性,可以采用使用不同消息码的方式使目标数据库区分所接收到的请求是包含一个SQL语句,还是包含多个SQL语句,从而确定是按照一个SQL语句的处理流程来执行后续操作(即:解析出一个SQL语句后执行该SQL语句,然后向发送该请求的源端返回操作响应),还是按照多个SQL语句的处理流程来执行后续操作(即:从请求中逐条解析出SQL语句,每解析出一条SQL语句就执行该SQL语句对应的操作,直到所有SQL语句都执行完成后,才向发送该请求的源端返回操作响应)。如:通过消息码1来指示数据库所接收到的请求是客户端或逻辑复制工具采用现有技术所生成的消息,通过消息码2来指示数据库所接收到的请求是客户端或逻辑复制工具采用本申请方案所生成的消息。因此,数据库在接收到客户端或逻辑复制工具所发送的请求后,就可以根据消息码1或消息码2来执行不同的后续过程,从而达到了与现有技术生态兼容的目的。
在第一方面的一种可能的实现方式中,向目标数据库发送请求之后,该方法还包括:释放缓冲区。
该种可能的实现方式中,在请求发送后,数据库连接组件可以释放缓冲区,这样,可以快速回收用于与目标数据库进行交互的相应资源,提高相应资源的利用率。
本申请第二方面提供一种处理结构化查询语言SQL语句的方法,包括:接收数据库连接组件发送的请求,该请求包括多个SQL语句以及多个SQL语句中每个SQL语句所绑定的参数,该参数用于指示每个SQL语句所操作数据的位置和值;按照每个SQL语句所绑定的参数所指示的位置和值,执行每个SQL语句的操作类型所对应的操作;向数据库连接组件返回操作响应。
本申请中与第一方面相同的特征可以参阅第一方面的内容进行理解,此处不再重复赘述。
该第二方面中,目标数据库从数据库连接组件接收到的一个请求中包含多个SQL语句,从而可以执行对多个SQL语句的处理,不需要与数据库连接组件交互多次,节省了网络开销,并且提升了SQL语句执行效率。
在第二方面的一种可能的实现方式中,每个SQL语句所操作数据的数据条数可以全部相同,当然,每个SQL语句所操作数据的数据条数也可以不全部相同。
本申请中,因为每个SQL语句所操作的数据条数可以是不相同的,这样,SQL语句所对应的数据是灵活的,进一步提升了SQL语句的执行效率。
在第二方面的一种可能的实现方式中,请求中还包括目标消息码,目标消息码指示请求中包含多条SQL语句,该方法还包括:根据目标消息码,从请求中逐条解析出多条SQL语句中的每个SQL语句以及每个SQL语句所绑定的参数。
该种可能的实现方式中可以参阅前述第一方面的可能的实现方式中的相应内容进行理解。
在第二方面的一种可能的实现方式中,该方法还包括:释放用于处理该请求的资源。
该种可能的实现方式中,目标数据库在处理好请求中的多个SQL语句后,就可以释放相应资源,从而提高了相应资源的利用率。
在第二方面的一种可能的实现方式中,多个SQL语句所对应的操作包括增加、删除或修改中的至少一种。
本申请第三方面,提供了一种处理结构化查询语言SQL语句的装置,用于执行上述第一方面或第一方面的任意可能的实现方式中的方法。具体地,该处理结构化查询语言SQL语句的装置包括用于执行上述第一方面或第一方面的任意可能的实现方式中的方法的模块或单元,如:创建单元、处理单元和发送单元。
本申请第四方面,提供了一种处理结构化查询语言SQL语句的装置,用于执行上述第二方面或第二方面的任意可能的实现方式中的方法。具体地,该处理结构化查询语言SQL语句的装置包括用于执行上述第二方面或第二方面的任意可能的实现方式中的方法的模块或单元,如:接收单元、处理单元和发送单元。
本申请第五方面提供一种计算机设备,该计算机设备包括处理器、内存和存储有计算机程序的计算机可读存储介质;处理器与计算机可读存储介质耦合,处理器上运行的计算机执行指令,当计算机执行指令被处理器执行时,处理器执行如上述第一方面或第一方面任意一种可能的实现方式的方法。可选地,该计算机设备还可以包括输入/输出(input/output,I/O)接口,该存储有计算机程序的计算机可读存储介质可以是存储器。
本申请第六方面提供一种计算机设备,该计算机设备包括处理器、内存和存储有计算机程序的计算机可读存储介质;处理器与计算机可读存储介质耦合,处理器上运行的计算机执行指令,当计算机执行指令被处理器执行时,处理器执行如上述第二方面或第二方面任意一种可能的实现方式的方法。可选地,该计算机设备还可以包括I/O接口,该存储有计算机程序的计算机可读存储介质可以是存储器。
本申请第七方面提供一种存储一个或多个计算机执行指令的计算机可读存储介质,当计算机执行指令被处理器执行时,处理器执行如上述第一方面或第一方面任意一种可能的实现方式的方法。
本申请第八方面提供一种存储一个或多个计算机执行指令的计算机可读存储介质,当计算机执行指令被处理器执行时,处理器执行如上述第二方面或第二方面任意一种可能的实现方式的方法。
本申请第九方面提供一种存储一个或多个计算机执行指令的计算机程序产品,当计算机执行指令被处理器执行时,处理器执行如上述第一方面或第一方面任意一种可能的实现方式的方法。
本申请第十方面提供一种存储一个或多个计算机执行指令的计算机程序产品,当计算机执行指令被处理器执行时,处理器执行如上述第二方面或第二方面任意一种可能的实现方式的方法。
本申请第十一方面提供了一种芯片系统,该芯片系统包括至少一个处理器和接口,该接口用于接收数据和/或信号,至少一个处理器用于支持计算机设备实现上述第一方面或第一方面任意一种可能的实现方式中所涉及的功能。在一种可能的设计中,芯片系统还可以包括存储器,存储器,用于保存计算机设备必要的程序指令和数据。该芯片系统,可以由芯片构成,也可以包含芯片和其他分立器件。
本申请第十二方面提供了一种芯片系统,该芯片系统包括至少一个处理器和接口,该接口用于接收数据和/或信号,至少一个处理器用于支持计算机设备实现上述第二方面或第二方面任意一种可能的实现方式中所涉及的功能。在一种可能的设计中,芯片系统还可以包括存储器,存储器,用于保存计算机设备必要的程序指令和数据。该芯片系统,可以由芯片构成,也可以包含芯片和其他分立器件。
本申请实施例,数据库连接组件与数据库交互时,如:客户端与数据库交互时,或者源数据库通过逻辑复制工具与目标数据库交互时,可以通过一个请求传输多条SQL语句,减少了网络开销以及提升SQL语句执行的效率。
附图说明
图1是本申请实施例提供的一应用场景示意图;
图2A是本申请实施例提供的另一应用场景示意图;
图2B是本申请实施例提供的另一应用场景示意图;
图3A是单机数据库系统示意图;
图3B是采用共享磁盘架构的集群数据库系统示意图;
图3C是采用无共享架构的集群数据库系统示意图;
图4是本申请实施例提供的处理结构化查询语言SQL语句的方法的一实施例示意图;
图5是本申请实施例提供的处理结构化查询语言SQL语句的装置的一实施例示意图;
图6是本申请实施例提供的处理结构化查询语言SQL语句的装置的另一实施例示意图;
图7是本申请实施例提供的处理结构化查询语言SQL语句的装置的另一实施例示意图;
图8是本申请实施例提供的数据库系统的一实施例示意图;
图9是本申请实施例提供的集群数据库系统的一实施例示意图。
具体实施方式
下面结合附图,对本申请的实施例进行描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。本领域普通技术人员可知,随着技术发展和新场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本申请实施例提供一种处理结构化查询语言SQL语句的方法,用于减少网络交互次数以及提升SQL语句的执行效率。本申请实施例还提供了相应的装置、系统、计算机可读存储介质及计算机程序产品等。以下分别进行详细说明。
本申请实施例所提供的方案可以应用于客户端与目标数据库交互的场景,也可以应用于源数据库和目标数据库通过逻辑复制工具实现增量数据实时同步的场景,以及其它涉及批量执行SQL的场景。逻辑复制工具可以是一个软件或插件,如:Z-logCatcher,源数据库可以部署于云设备上,目标数据库也可以部署于云设备上,其中,逻辑复制工具与源数据库可以部署于同一台云设备上,也可以部署于不同的云设备上,目标数据库可以与源数据库部署于同一台云设备上,也可以部署于不同的云设备上。该云设备可以是一台或多台服务器,也可以是一个或多个虚拟机(virtual machine,VM)或容器(container)。
本申请中,客户端可以是软件(如:应用(application,APP)),也可以是运行有软件的硬件(如:终端设备)。若客户端是终端设备,该终端设备(也可以称为用户设备(userequipment,UE))是一种具有无线收发功能的设备,可以部署在陆地上,包括室内或室外、手持或车载;也可以部署在水面上(如轮船等);还可以部署在空中(例如飞机、气球和卫星上等)。终端可以是手机(mobile phone)、平板电脑(pad)、带无线收发功能的电脑、虚拟现实(virtual reality,VR)终端、增强现实(augmented reality,AR)终端、工业控制(industrial control)中的无线终端、无人驾驶(self driving)中的无线终端、远程医疗(remote medical)中的无线终端、智能电网(smart grid)中的无线终端、运输安全(transportation safety)中的无线终端、智慧城市(smart city)中的无线终端、智慧家庭(smart home)中的无线终端、以物联网(internet of things,IoT)中的无线终端等。
如图1所示,为客户端与目标数据库交互的场景示意图。
在图1所示的场景中,客户端上可以配置有数据库连接组件,比如Java数据库连接(Java Database Connectivity,JDBC)模块。该JDBC模块是客户端执行SQL语句时与目标数据库的连接驱动模块,客户端执行SQL语句需要通过JDBC模块与目标数据库进行交互,JDBC模块将SQL语句和对应SQL的数据通过网络传输给目标数据库,目标数据库接收到对应请求消息并处理后将处理结果返回给客户端,然后客户端通过业务逻辑处理从目标数据库返回的结果数据,从而实现了一个完整的请求响应处理流程。除特定语境下的描述以外,本申请所描述的“数据库”一般是指数据库管理系统(database management system,DBMS)。比如以上描述的客户端与目标数据库的交互过程是指客户端与目标数据库管理系统交互的过程。
如图2A所示,为源数据库通过逻辑复制工具与目标数据库交互的一场景示意图。
在图2A所示的场景中,逻辑复制工具可以将源数据库上的变化数据实时同步到目标数据库,该变化数据也可以称为增量数据。该逻辑复制工具可以包括JDBC模块,该JDBC模块是源数据库执行SQL语句时与目标数据库的连接驱动模块,该源数据库执行SQL语句需要通过JDBC模块与目标数据库进行交互,JDBC模块将SQL语句和对应SQL的数据通过网络传输给目标数据库。
如图2B所示,为源数据库通过逻辑复制工具与目标数据库交互的另一场景示意图。
在图2B所示的场景中,源数据库中包括多个表(table),元数据(meta data)和在线日志(redo log)或归档日志(archive log),逻辑复制工具将元数据读到元数据缓存(metadata cache)中,将在线日志或归档日志读到逻辑缓存(logic log cache)中,然后通过JDBC模块与目标数据库进行交互,JDBC模块将SQL语句和对应SQL的数据通过网络传输给目标数据库。
上述图1、图2A或图2B所示的场景中,无论是源数据库还是目标数据库,都可以理解为是单机数据库管理系统或者集群数据库管理系统。数据库系统(database system)一般由以下三部分组成:(1)数据库(database,DB),指长期存储在计算机内的,有组织,可共享的数据的集合。数据库中的数据按一定的数学模型组织、描述和存储,具有较小的冗余,较高的数据独立性和易扩展性,并可为各种用户共享。(2)硬件,包括存储数据所需的数据存储器,例如内存和/或磁盘。(3)软件,包括数据库管理系统(database managementsystem,DBMS),DBMS是数据库系统的核心软件,是用于科学地组织和存储数据,以及高效获取和维护数据的系统软件,数据库引擎是DBMS的核心组件。本领域技术人员通常将数据库管理系统简称为“数据库”,因此,除特定语境下用“数据库”指代DBMS所管理的数据集合以外,本申请所描述的“数据库”一般是指数据库管理系统。
具体地,图3A为单机数据库系统示意图,包括一个数据库管理系统和数据存储器(data storage),该数据库管理系统用于提供数据库的查询和修改等服务,该数据库管理系统将数据存储到数据存储器中。在单机数据库系统中,数据库管理系统和数据存储器通常位于单一服务器上,比如一台对称多处理(symmetric multi-processor,SMP)服务器。该SMP服务器包括多个处理器,所有的处理器共享资源,如总线,内存和I/O系统等。数据库管理系统的功能可由一个或多个处理器执行内存中的程序来实现。
图3B为采用共享磁盘(shared-storage)架构的集群数据库系统示意图,包括多个节点(如图3B中的节点1-N),每个节点部署有数据库管理系统,分别为用户提供数据库的查询和修改等服务,多个数据库管理系统存储有共享的数据在共享数据存储器中,并且通过交换机对数据存储器中的数据执行读写操作。共享数据存储器可以为共享磁盘阵列。集群数据库系统中的节点可以为物理机,比如数据库服务器,也可以为运行在抽象硬件资源上的虚拟机(virtual machine,VM)或容器(container)。当节点为虚拟机或容器时,节点中部署的数据库管理系统为DBMS实例(instance),该DBMS可以是进程或线程。若节点为物理机,则交换机为存储区网络(storage area network,SAN)交换机、以太网交换机,光纤交换机或其它物理交换设备。若节点为虚拟机或容器,则交换机为虚拟交换机。
图3C为采用无共享(shared-nothing)架构的集群数据库系统示意图,每个节点具有各自独享的硬件资源(如数据存储器)、操作系统和数据库,节点之间通过网络来通信。该体系下,数据将根据数据库模型和应用特点被分配到各个节点上,查询任务将被分割成若干部分,在所有节点上并行执行,彼此协同计算,作为整体提供数据库服务,所有通信功能都在一个高宽带网络互联体系上实现。如同图3B所描述的shared-storage架构的集群数据库系统一样,这里的节点既可以是物理机,也可以是虚拟机。
在本申请所有实施例中,数据库系统的数据存储器(data storage)包括但不限于固态硬盘(solid state drives,SSD)、磁盘阵列或其他类型的非瞬态计算机可读介质。图3A-图3C中虽未示出数据库,应理解,数据库存储在数据存储器中。所属领域的技术人员可以理解一个数据库系统可能包括比图3A-图3C中所示的部件更少或更多的组件,或者包括与图3A-图3C中所示组件不同的组件,图3A-图3C仅仅示出了与本申请实施例所公开的实现方式更加相关的组件。例如,虽然图3B和图3C中已经描述了4个节点,但所属领域的技术人员可理解成一个集群数据库系统可包含任何数量的节点。各节点的数据库管理系统功能可分别由运行在各节点上的软件、硬件和/或固件的适当组合来实现。
上述图3A至图3C的数据库系统都包括节点,下面结合附图对节点的结构进行介绍。该节点可以包括:至少一个处理器、存储可执行代码的非瞬态计算机可读介质(non-transitory computer-readable medium)和数据库管理系统。可执行代码在被至少一个处理器执行时被配置为实现数据库管理系统的组件和功能。非瞬态计算机可读介质可以包括一个或多个非易失性存储器,作为示例,非易失性存储器包括半导体存储器设备,例如可擦可编程只读存储器(erasable programmable read only memory,EPROM),电可擦只读存储器(electrically erasable programmable read only memory,EEPROM)和闪存(flashmemory);磁盘,例如内部硬盘(internal hard disk)或可移动磁盘(removable disk),磁光盘(magneto optical disk),以及CD ROM和DVD-ROM。此外,非瞬态计算机可读介质还可以包括被配置为主存储器(main memory)的任何设备。至少一个处理器可以包括任何类型的通用计算电路或专用逻辑电路,例如:现场可编程门阵列(field-programmable gatearray,FPGA)或专用集成电路(application specific integrated circuit,ASIC)。至少一个处理器104也可以是耦合到一个或多个半导体基板的一个或多个处理器,例如CPU。
数据库管理系统支持结构化查询语言(structured query language,SQL)。通常,SQL是指专门用于管理关系型数据库中保存的数据的专用编程语言。SQL可以指代各种类型的数据相关语言,包括例如数据定义语言和数据操纵语言,其中SQL的范围可以包括数据插入,查询,更新和删除,模式创建和修改以及数据访问控制。此外,在一些示例中,SQL可以包括与各种语言元素相关的描述,包括子句(clause),表达式(expression),谓词(predicate)和查询语句(Query statement),查询语句通常也简称为“查询(query)”。例如,子句可以指语句和查询的各种组成部分,并且在一些情况下,子句可以被认为是可选的。此外,表达式可以被配置为产生包括数据列和/或行的标量值(scalar value)和/或表。另外,谓词可经配置以指定条件,以用于调节语句和查询的效果。
查询语句是请求查看,访问和/或操纵存储在数据库中的数据。数据库管理系统可以从客户端接收SQL格式的查询(称为SQL查询)。该SQL查询也可以称为SQL语句。通常,数据库管理系统通过从数据库访问相关数据并操纵相关数据以生成查询所对应的查询结果,并将查询结果返回到数据库客户端。数据库是按一定的数学模型组织、描述和存储的数据集合,数据库可以包括一个或多个数据库结构或格式,例如行存储和列存储。
无论上述实施例中,图1、图2A或图2B所示场景,还是图3A至图3C所示的数据库系统的结构,都可以适用本申请实施例所提供的方法,本申请实施例所提供的方法可以应用于数据库连接组件,该数据库连接组件可以是用于与数据库连接的驱动程序,如:JDBC驱动程序,该数据库连接组件还可以是与数据库交互的客户端,或者用于实现源数据库和目标数据库之间数据实时同步的逻辑复制工具,或者部署前述客户端或逻辑复制工具的设备,或者作为一个功能单元集成在签署客户端或者逻辑复制工具中。
下面结合附图介绍本申请实施例所提供的处理结构化查询语言SQL语句的方法。
如图4所示,本申请实施例提供的处理结构化查询语言SQL语句的方法的一实施例包括:
401.数据库连接组件创建用于关联多个SQL语句的缓冲区。
本申请中,多个SQL语句可以包括两个SQL语句或两个以上SQL语句,也可以描述为至少两个SQL语句。缓冲区可以是内存中的一块资源,缓冲区也可以是一个对象,比如预处理PreparedStatement对象,该PreparedStatement对象用于关联多个SQL语句。
402.数据库连接组件将多个SQL语句填充到缓冲区。
本申请中,将SQL语句填充到缓冲区的过程指的是将SQL语句放入或加载至缓存,或者,将SQL语句填充到PreparedStatement对象的过程,例如为对象中的成员或变量赋值。
403.数据库连接组件为填充到缓冲区的每个SQL语句绑定对应的参数。
其中,每个SQL语句绑定的参数用于指示该SQL语句所操作数据的位置和值。
本申请中,为每个SQL语句绑定对应的参数的过程指的是建立参数与SQL语句联系的过程,如:在位置上,将相应参数配置在该SQL语句的紧相邻的下一行或下几行。
本申请中,每个SQL语句绑定的参数用于指示对应SQL语句所操作数据的位置和值,其中,位置可以指示表格中的指定行,指定列,或者指定行的指定列,值表示该位置所要插入、修改或删除的数值。
本申请中,也可以将多个SQL语句按照填充到缓冲区的顺序以及所绑定的参数排布好后所得到的数据结构及内容称为SQL语句结构体。
404.数据库连接组件向目标数据库发送请求,对应地,目标数据库接收数据库连接组件发送的请求。
该请求包括填充到缓冲区的多个SQL语句以及多个SQL语句中每个SQL语句所绑定的参数。
405.目标数据库按照每个SQL语句所绑定的参数所指示的位置和值,执行每个SQL语句的操作类型所对应的操作。
406.目标数据库向数据库连接组件返回操作响应。
本申请实施例所提供的方案,客户端与数据库交互时,或者源数据库通过逻辑复制工具与目标数据库交互时,数据库连接组件可以通过一个请求传输多条SQL语句,减少了网络开销,还提升了SQL语句执行的效率。数据库连接组件通常是一个软件组件,比如诸如JDBC驱动之类的驱动程序,使得应用程序可以与数据库进行交互,或者数据库与数据库之间能够进行交互。
可选地,每个SQL语句所操作数据的数据条数可以全部相同。当然,每个SQL语句所操作数据的数据条数也可以不全部相同。
其中,每个SQL语句所操作数据的数据条数可以不全部相同可以理解为:有的SQL语句可以操作一条数据,有的SQL语句可以操作多条数据,有的SQL语句也可以不操作数据,即不需要每个SQL语句操作相同条数的数据。本申请中,每个SQL语句所操作的数据条数可以根据需求设置。本申请中,因为每个SQL语句所操作的数据条数可以是不相同的,这样,SQL语句所对应的数据是灵活的,进一步提升了SQL语句的执行效率。
可选地,本申请实施例中,上述步骤402和403可以包括:包括:将多个SQL语句中的第一SQL语句填充到缓冲区,并为第一SQL语句绑定第一参数,该第一参数指示第一SQL语句所操作数据的位置和值;将第一SQL语句填充到缓冲区之后,将第二SQL语句填充到缓冲区,并为第二SQL语句绑定第二参数,该第二参数指示第二SQL语句所操作数据的位置和值。
本申请实施例中,在向缓冲区中填充SQL语句时,可以是填充一条SQL语句后,为该条SQL语句绑定参数,在绑定参数时,再异步向缓冲区填充另外一条SQL语句。也可以是填充一条SQL语句后,执行完该条SQL语句的参数绑定,再向缓冲区填充另外一条SQL语句。本申请这种逐个填充SQL语句的方式,有利于保持SQL语句的顺序,便于目标数据库有序执行各条SQL语句。
关于按顺序填充SQL语句并在每个SQL语句的参数绑定后再填充下一个SQL的过程可以参阅如下示例进行理解。
1.数据库连接组件上执行如下sql语句:
sql语句1:insert into t1(f1,f2)values(101,101);
sql语句2:insert into t1(f1,f2)values(102,102);
sql语句3:delete from t2 where f1=301;
sql语句4:insert into t2(f1,f2)values(301,301);
其中,sql语句1表示在表1(t1)的位置1(f1)和位置2(f2)插入(insert)值(values)101。
sql语句2表示在表1(t1)的位置1(f1)和位置2(f2)插入(insert)值(values)102。
sql语句3表示删除表2(t2)中值位置f1处值等于301的数据。
sql语句4表示在表2(t2)的位置1(f1)和位置2(f2)插入(insert)值(values)301。
因为上述sql语句1和sql语句2都是对表1(t1)中相同位置处(f1,f2)执行插入(insert)操作,所以,可以将sql语句1和sql语句2进行拼接,并将每个sql语句中的值转换为占位符(?)的形式,则上述四个sql语句可以转换为如下三个sql语句:
sql语句1’:insert into t1(f1,f2)values(?,?);
sql语句2’:delete from t2 where f1=?;
sql语句3’:insert into t2(f1,f2)values(?,?);
其中,sql语句1’表示在表1(t1)中的位置(f1,f2)处执行插入,插入操作的值不固定在该sql语句1’中,通过占位符(?)的形式填充该值的字段。该占位符对应的一个或多个值在后续追加绑定。
sql语句2’表示删除表2(t2)中位置f1处的一个或多个值,该一个或多个值在后续追加绑定。
sql语句3’表示在表2(t2)的位置1(f1)和位置2(f2)插入(insert)一个或多个值,该一个或多个值在后续追加绑定。
准备好sql语句后,本申请实施例可以执行如下过程:
Connection conn=DriverManager.getConnection(url,username,password);
PreparedStatement ps=conn.prepareStatement();
ps.addMulti(“insert into t1(f1,f2)values(?,?)”);
ps.setInt(1,101);
ps.setInt(2,101);
ps.addBatch();
ps.setInt(1,102);
ps.setInt(2,102);
ps.addBatch();
ps.addMulti(“delete from t2 where f1=?)”);
ps.setInt(1,301);
ps.addBatch();
ps.addMulti("insert into t2(f1,f2)values(?,?)");
ps.setInt(1,301);
ps.setInt(2,301);
ps.addBatch();
ps.executeBatch();
ps.close()。
关于这段代码所描述的过程可以理解为包括如下第2至第8步骤:
2.数据库连接组件与目标数据库创建连接。
Connection conn=DriverManager.getConnection(url,username,password);
3.数据库连接组件创建PreparedStatement对象。
PreparedStatement ps=conn.prepareStatement();
4.追加sql语句1’。
ps.addMulti(“insert into t1(f1,f2)values(?,?)”);
ps.setInt(1,101);
ps.setInt(2,101);
ps.addBatch();
ps.setInt(1,102);
ps.setInt(2,102);
ps.addBatch();
在PreparedStatement对象的下一行通过“ps.addMulti”追加标识或追加接口,追加上sql1’语句,然后通过“ps.setInt”标识绑定相应的参数,如:ps.setInt(1,101)表示位置f1处绑定的值是101,ps.setInt(2,101)表示位置f2处绑定的值是101,ps.addBatch()是绑定结束的标识,每次绑定好一个初始sql的参数后,都会使用一次绑定结束的标识ps.addBatch()。
因为追加sql语句1’中拼接了两个初始sql语句,即:sql语句1和sql语句2,所以,在该sql语句1’的第一个ps.addBatch()后面会继续绑定sql语句2的参数,ps.setInt(1,102)表示位置f1处绑定的值是102,ps.setInt(2,102)表示位置f2处绑定的值是102,然后使用第二个ps.addBatch()来结束针对sql语句2的参数的绑定。
5.追加sql语句2’。
ps.addMulti(“delete from t2 where f1=?)”);
ps.setInt(1,301);
ps.addBatch();
在sql语句1’的参数都绑定好后,在上述sql语句1’后的第二个ps.addBatch()的下一行通过ps.addMulti(“delete from t2 where f1=?)”)追加sql语句2’,然后,通过“ps.setInt”标识绑定相应的参数。如:ps.setInt(1,301)表示位置f1处绑定的值是301,然后使用第三个ps.addBatch()结束针对sql语句2’的参数的绑定。
6.追加sql语句3’。
ps.addMulti("insert into t2(f1,f2)values(?,?)");
ps.setInt(1,301);
ps.setInt(2,301);
ps.addBatch();
在sql语句2’的参数都绑定好后,在上述sql语句2’后的ps.addBatch()的下一行通过ps.addMulti("insert into t2(f1,f2)values(?,?)")追加sql语句3’,然后,通过“ps.setInt”标识绑定相应的参数。如:ps.setInt(1,301)表示位置f1处绑定的值是301,ps.setInt(2,301)表示位置f2处绑定的值是301,然后使用第四个ps.addBatch()结束针对sql语句3’的参数的绑定。
因为本示例中,只设置了sql语句1’、sql语句2’和sql语句3’这三个语句,所以,这三个语句绑定后,就执行如下步骤7。
7.执行sql语句,与数据库进行网络交互。
ps.executeBatch();
本申请中,通过ps.executeBatch()执行sql语句,与数据库进行网络交互。
8.资源释放。
ps.close();
本申请中,执行ps.close(),释放用于处理该PreparedStatement对象的资源。
由上述示例中可见,本申请中的预处理对象的形式为:conn.prepareStatement(),不同于现有的标准的形式:conn.prepareStatement(sql),这样,就可以保证在创建PreparedStatement对象时不需要填充sql语句,而是通过追加标识ps.addMulti(sql)填充sql语句,通过不断的循环填充sql语句,从而实现批量sql的功能。由上述三个sql语句的示例可见,采用本申请的方案,只需要通过一个请求和一个响应两次网络交互就可以完成数据库连接组件与目标数据库的通信,而如果按照现有的方式,每个sql语句都需要通过两次网络交互,3个sql语句需要通过6次网络交互才能完成数据库连接组件与目标数据库的通信。而在实际场景中,一个请求中可以追加有很多条sql语句,这样相对于现有每个sql语句都要给目标数据库发送一个请求相比,本申请的方案,极大的提高了网络性能。
可选地,上述步骤401可以通过预处理接口创建关联多个SQL语句的缓冲区,缓冲区包括预处理PreparedStatement对象。
该预处理接口可以是私有的预处理接口,本申请实施例提供的方案可以理解为通过私有的预处理接口创建PreparedStatement对象。该种通过私有的预处理接口创建的PreparedStatement对象,在创建该对象时不需要填充SQL语句,也就是解绑了PreparedStatement对象与SQL语句之间的关系,从而提高了后续填充SQL语句的灵活性。
可选地,将多个SQL语句填充到缓冲区,包括:通过追加接口将多个SQL语句逐个填充到缓冲区。
追加接口可以是私有的接口,该私有的追加接口的功能是向缓冲区中填充SQL语句,该追加接口可以参阅上述示例中的“ps.addMulti”进行理解,本申请通过循环的方式可以填充多条SQL语句,从而实现了一个请求中填充批量SQL语句的功能。
可选地,本申请实施例中,多个SQL语句的操作类型包括增加、删除或修改中的至少一种。
可选地,上述步骤403发送的请求中还包括目标消息码,该目标消息码指示请求中包含多条SQL语句。
现有技术中,目标数据库可以处理一个请求中包含一个SQL语句的操作。本申请中,考虑到与现有技术的生态兼容性,可以采用使用不同消息码的方式使目标数据库区分所接收到的请求是包含一个SQL语句,还是包含多个SQL语句,从而确定是按照一个SQL语句的处理流程来执行后续操作(即:解析出一个SQL语句后执行该SQL语句,然后向发送该请求的源端返回操作响应),还是按照多个SQL语句的处理流程来执行后续操作(即:从请求中逐条解析出SQL语句,每解析出一条SQL语句就执行该SQL语句对应的操作,直到所有SQL语句都执行完成后,才向发送该请求的源端返回操作响应)。如:通过消息码1来指示数据库所接收到的请求是客户端或逻辑复制工具采用现有技术所生成的消息,通过消息码2来指示数据库所接收到的请求是客户端或逻辑复制工具采用本申请方案所生成的消息。因此,数据库在接收到客户端或逻辑复制工具所发送的请求后,就可以根据消息码1或消息码2来执行不同的后续过程,从而达到了与现有技术生态兼容的目的。
可选地,数据库连接组件向目标数据库发送请求之后,该方法还包括:释放缓冲区。同样的,目标数据库在处理好请求中的多个SQL语句后,就可以释放用于处理该请求的资源。
本申请实施例中,数据库连接组件在请求发送后,释放缓冲区,可以快速回收用于与目标数据库进行交互的相应资源,提高相应资源的利用率。同样的,目标数据库在处理好请求中的多个SQL语句后,释放用于处理请求的资源,也会提高了相应资源的利用率。
由上述实施例以及相应的示例可知,采用本申请实施例所提供的方案可以减少网络交互次数,从而减少向目标数据库操作数据的耗时。为了更好的展示本申请的效果,下面结合测试场景的数据对采用现有技术的方案和采用本申请的方案的测试结果进行对比说明。该测试场景中,采用6张表,每张表的数据列分别为10列、20列、30列、40列、50列和60列。
测试场景数据:
Figure BDA0003091155440000141
该测试场景中,数据库连接组件使用6个线程同时对6张表中插入数据,每张表的并发数都为1,从第一行使用现有技术的数据和第二行使用本申请方案的数据可以看出,当每张表的事务数都是1000,每个事务影响的数据条数都是1,每张表的数据总条数都是1000,6张表的总数据量为6千(k)条时,使用现有技术完成数据操作的操作数据耗时为367377毫秒(ms),而采用本申请的方案只需要1405ms,可见,采用本申请的方案在优化效果上相对于现有技术耗时减少了很多。另外,从第二行每张表1000条事务数和第三行每张表5000行的耗时对比上可见,三万条数据仍然只需要花费1.4秒,由此可见性能优化效果相当明显。
以上介绍了处理结构化查询语言SQL语句的方法,下面结合附图介绍本申请实施例提供的相应装置。
如图5所示,本申请实施例提供的处理结构化查询语言SQL语句的装置50的一实施例包括:
创建单元501,用于创建用于关联多个SQL语句的缓冲区。该创建单元501用于执行方法实施例中的步骤401。
处理单元502,用于将多个SQL语句填充到缓冲区,以及为填充到缓冲区的每个SQL语句绑定对应的参数;其中,参数用于指示每个SQL语句所操作数据的位置和值。该处理单元502用于执行方法实施例中的步骤402和步骤403。
发送单元503,用于向目标数据库发送请求,请求包括处理单元填充到缓冲区的多个SQL语句以及多个SQL语句中每个SQL语句所绑定的参数。该发送单元503用于执行方法实施例中的步骤404。
本申请实施例所提供的方案中数据库连接组件与目标数据库交互时,可以通过一个请求传输多条SQL语句,减少了网络开销以及提升SQL语句的执行效率。
可选地,每个SQL语句所操作数据的数据条数不全部相同。
可选地,处理单元502用于:将多个SQL语句中的第一SQL语句填充到缓冲区,并为第一SQL语句绑定第一参数,第一参数指示第一SQL语句所操作数据的位置和值;将第一SQL语句填充到缓冲区之后,将第二SQL语句填充到缓冲区,并为第二SQL语句绑定第二参数,第二参数指示第二SQL语句所操作数据的位置和值。
可选地,创建单元501,用于通过预处理接口创建关联多个SQL语句的缓冲区,缓冲区包括预处理PreparedStatement对象。
可选地,处理单元502,用于通过追加接口将多个SQL语句逐个填充到缓冲区。
可选地,多个SQL语句的操作类型包括增加、删除或修改中的至少一种。
可选地,该请求中还包括目标消息码,该目标消息码指示请求中包含多条SQL语句。
可选地,处理单元502,还用于释放缓冲区。
如图6所示,本申请实施例提供的处理结构化查询语言SQL语句的装置60的一实施例包括:
接收单元601,用于接收数据库连接组件发送的请求,请求包括多个SQL语句以及多个SQL语句中每个SQL语句所绑定的参数,参数用于指示每个SQL语句所操作数据的位置和值。该接收单元601用于执行上述方法实施例中的步骤404中目标数据库所执行的步骤。
处理单元602,用于按照接收单元接收的请求中的每个SQL语句所绑定的参数所指示的位置和值,执行每个SQL语句的操作类型所对应的操作。该处理单元602用于执行上述方法实施例中的步骤405。
发送单元603,用于在处理单元执行操作后,向数据库连接组件返回操作响应。该发送单元603用于执行上述方法实施例中的步骤406。
可选地,处理单元602,还用于在请求中还包括目标消息码,目标消息码指示请求中包含多条SQL语句时,根据目标消息码,从请求中逐条解析出多条SQL语句中的每个SQL语句以及每个SQL语句所绑定的参数。
可选地,处理单元602,还用于释放处理所述请求所占用的资源。
以上,本申请实施例提供的处理结构化查询语言SQL语句的装置可以参阅前述方法实施例部分的相应内容进行理解,此处不再重复赘述。
图7所示,为本申请的实施例提供的上述实施例中所涉及的处理结构化查询语言SQL语句的装置70的一种可能的逻辑结构示意图。处理结构化查询语言SQL语句的装置70包括:处理器701、通信接口702、存储器703以及总线704。处理器701、通信接口702以及存储器703通过总线704相互连接。在本申请的实施例中,处理器701用于对处理结构化查询语言SQL语句的装置70的动作进行控制管理,例如,处理器701用于执行图4中的步骤401、402、403或405,和/或用于本文所描述的技术的其他过程。通信接口702用于支持处理结构化查询语言SQL语句的装置70进行通信,例如:通信接口702可以执行上述方法实施例中的步骤404或406的步骤。存储器703,用于存储数据库服务器70的程序代码和数据。
其中,处理器701可以是中央处理器单元,通用处理器,数字信号处理器,专用集成电路,现场可编程门阵列或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,数字信号处理器和微处理器的组合等等。总线704可以是外设部件互连标准(Peripheral ComponentInterconnect,PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
预测模型训练的装置的结构也可以参阅该图7进行理解。
参见图8,本申请实施例还提供一种数据库系统,包括:数据库服务器800,与数据库服务器800通过通信网络连接的客户端设备900。其中,
客户端设备900的硬件层906上运行有客户端操作系统904,操作系统904上运行有应用程序902;数据库服务器800的硬件层816上运行有操作系统814,以及在操作系统814上运行有数据库管理系统812。应用程序902经由通信网络与在数据库服务器800上运行的数据库管理系统812连接并且访问或者操作存储在数据存储器818中的数据库,例如,通过SQL语句查询、更新或删除数据库中的数据,或者导入新的数据至数据库。
硬件层906和816包含操作系统和应用程序运行所需的基本硬件单元,例如,处理器,例如CPU,内存(Memory)、输入/输出设备、网络接口等。
数据存储器818可以是数据库服务器800的外部存储器,比如硬盘、磁盘、存储阵列,或存储服务器等,与数据库服务器800通信连接。或者,数据存储器818也可以集成在数据库服务器800内部,与处理器和I/O设备通过总线或其它内部通信方式交互数据。
数据库服务器800的内存中存储有可执行代码,该可执行代码在被处理器执行时被配置为实现数据库管理系统812的组件和功能。数据库管理系统812相关功能及实现细节可参照图4相关的实施例,此处不再赘述。
参见图9,本申请实施例还提供一种集群数据库系统,包括:包括硬件层1007和运行在硬件层1007之上的虚拟机监控器(VMM)1001,以及多个虚拟机1002。一个虚拟机可以作为集群数据库系统的一个数据节点。可选第,还可以指定一个虚拟机作为协调节点。
具体的,虚拟机1002是通过虚拟机软件在公共硬件资源上模拟出的虚拟的计算机,虚拟机上可以安装操作系统和应用程序,虚拟机还可访问网络资源。对于在虚拟机中运行的应用程序而言,虚拟机就像是在真正的计算机中进行工作。
硬件层1007:虚拟化环境运行的硬件平台,可以由一个或多个物理主机的硬件资源抽象得到的。其中,硬件层可包括多种硬件,例如包括处理器1004(例如CPU)和存储器1005,还可以包括网卡1003(例如RDMA网卡)、高速/低速输入/输出(I/O,Input/Output)设备,及具有特定处理功能的其它设备。
虚拟机1002基于VMM,以及硬件层1007提供的硬件资源,运行可执行程序,以实现上述图4相关的实施例中处理结构化查询语言SQL语句的装置的部分或全部功能。为了简洁,在此不再赘述。
进一步地,该集群数据库系统还可以包括宿主机(Host):作为管理层,用以完成硬件资源的管理、分配;为虚拟机呈现虚拟硬件平台;实现虚拟机的调度和隔离。其中,Host可能是虚拟机监控器(VMM);也有可能是由VMM和1个特权虚拟机的结合。其中,虚拟硬件平台对其上运行的各个虚拟机提供各种硬件资源,如提供虚拟处理器(如VCPU)、虚拟内存、虚拟磁盘、虚拟网卡等等。其中,该虚拟磁盘可对应Host的一个文件或者一个逻辑块设备。虚拟机运行在Host为其准备的虚拟硬件平台上,Host上运行一个或多个虚拟机。虚拟机1002的VCPU通过执行存储在其对应的虚拟内存中的可执行程序,以实现或者执行本发明上述各方法实施例中所描述的方法步骤。例如,实现上述图4相关的实施例中处理结构化查询语言SQL语句的装置的部分或全部功能。
在本申请的另一实施例中,还提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,当设备的至少一个处理器执行该计算机执行指令时,设备执行上述图4部分实施例数据库连接组件所描述的方法。
在本申请的另一实施例中,还提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,当设备的至少一个处理器执行该计算机执行指令时,设备执行上述图4部分实施例目标数据库所描述的方法。
在本申请的另一实施例中,还提供一种计算机程序产品,该计算机程序产品包括计算机执行指令,该计算机执行指令存储在计算机可读存储介质中;设备的至少一个处理器可以从计算机可读存储介质读取该计算机执行指令,至少一个处理器执行该计算机执行指令使得设备执行上述图4部分实施例数据库连接组件所描述的方法。
在本申请的另一实施例中,还提供一种计算机程序产品,该计算机程序产品包括计算机执行指令,该计算机执行指令存储在计算机可读存储介质中;设备的至少一个处理器可以从计算机可读存储介质读取该计算机执行指令,至少一个处理器执行该计算机执行指令使得设备执行上述图4部分实施例目标数据库所描述的方法。
在本申请的另一实施例中,还提供一种芯片系统,该芯片系统包括至少一个处理器和接口,该接口用于接收数据和/或信号,至少一个处理器用于支持处理结构化查询语言SQL语句的装置实现上述图4部分实施例数据库连接组件所描述的方法。在一种可能的设计中,芯片系统还可以包括存储器,存储器用于处理结构化查询语言SQL语句的装置必要的程序指令和数据。该芯片系统,可以由芯片构成,也可以包含芯片和其他分立器件。
在本申请的另一实施例中,还提供一种芯片系统,该芯片系统包括至少一个处理器和接口,该接口用于接收数据和/或信号,至少一个处理器用于支持处理结构化查询语言SQL语句的装置实现上述图4部分实施例目标数据库所描述的方法。在一种可能的设计中,芯片系统还可以包括存储器,存储器用于处理结构化查询语言SQL语句的装置必要的程序指令和数据。该芯片系统,可以由芯片构成,也可以包含芯片和其他分立器件。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请实施例的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请实施例所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请实施例各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请实施例各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

Claims (28)

1.一种处理结构化查询语言SQL语句的方法,其特征在于,包括:
创建用于关联多个SQL语句的缓冲区;
将所述多个SQL语句填充到所述缓冲区;
为填充到所述缓冲区的每个SQL语句绑定对应的参数;其中,所述参数用于指示所述每个SQL语句所操作数据的位置和值;
向目标数据库发送请求,所述请求包括填充到所述缓冲区的所述多个SQL语句以及所述多个SQL语句中每个SQL语句所绑定的参数。
2.根据权利要求1所述的方法,其特征在于,所述每个SQL语句所操作数据的数据条数不全部相同。
3.根据权利要求1所述的方法,其特征在于,所述将所述多个SQL语句中的每个SQL语句填充到所述缓冲区,以及,为所述多个SQL语句中填充到所述缓冲区的每个SQL语句绑定对应的参数,包括:
将所述多个SQL语句中的第一SQL语句填充到所述缓冲区,并为所述第一SQL语句绑定第一参数,所述第一参数指示所述第一SQL语句所操作数据的位置和值;
将所述第一SQL语句填充到所述缓冲区之后,将所述第二SQL语句填充到所述缓冲区,并为所述第二SQL语句绑定第二参数,所述第二参数指示所述第二SQL语句所操作数据的位置和值。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述创建用于关联多个SQL语句的缓冲区,包括:
通过预处理接口创建关联多个SQL语句的缓冲区,所述缓冲区包括预处理PreparedStatement对象。
5.根据权利要求1-4任一项所述的方法,其特征在于,所述将所述多个SQL语句填充到所述缓冲区,包括:
通过追加接口将所述多个SQL语句逐个填充到所述缓冲区。
6.根据权利要求1-5任一项所述的方法,其特征在于,所述多个SQL语句的操作类型包括增加、删除或修改中的至少一种。
7.根据权利要求1-6任一项所述的方法,其特征在于,所述请求中还包括目标消息码,所述目标消息码指示所述请求中包含所述多条SQL语句。
8.根据权利要求1-7任一项所述的方法,所述向目标数据库发送请求之后,所述方法还包括:
释放所述缓冲区。
9.一种处理结构化查询语言SQL语句的方法,其特征在于,包括:
接收数据库连接组件发送的请求,所述请求包括多个SQL语句以及所述多个SQL语句中每个SQL语句所绑定的参数,所述参数用于指示所述每个SQL语句所操作数据的位置和值;
按照所述每个SQL语句所绑定的参数所指示的位置和值,执行所述每个SQL语句的操作类型所对应的操作;
向所述数据库连接组件返回操作响应。
10.根据权利要求9所述的方法,其特征在于,所述请求中还包括目标消息码,所述目标消息码指示所述请求中包含所述多条SQL语句,所述方法还包括:
根据所述目标消息码,从所述请求中逐条解析出所述多条SQL语句中的每个SQL语句以及所述每个SQL语句所绑定的参数。
11.根据权利要求9或10所述的方法,其特征在于,所述方法还包括:
释放用于处理所述请求的资源。
12.根据权利要求9-11任一项所述的方法,其特征在于,所述多个SQL语句的操作类型包括增加、删除或修改中的至少一种。
13.一种处理结构化查询语言SQL语句的装置,其特征在于,包括:
创建单元,用于创建用于关联多个SQL语句的缓冲区;
处理单元,用于将所述多个SQL语句填充到所述缓冲区,以及为填充到所述缓冲区的每个SQL语句绑定对应的参数;其中,所述参数用于指示所述每个SQL语句所操作数据的位置和值;
发送单元,用于向目标数据库发送请求,所述请求包括所述处理单元填充到所述缓冲区的所述多个SQL语句以及所述多个SQL语句中每个SQL语句所绑定的参数。
14.根据权利要求13所述的装置,其特征在于,
所述处理单元用于:
将所述多个SQL语句中的第一SQL语句填充到所述缓冲区,并为所述第一SQL语句绑定第一参数,所述第一参数指示所述第一SQL语句所操作数据的位置和值;
将所述第一SQL语句填充到所述缓冲区之后,将所述第二SQL语句填充到所述缓冲区,并为所述第二SQL语句绑定第二参数,所述第二参数指示所述第二SQL语句所操作数据的位置和值。
15.根据权利要求13或14所述的装置,其特征在于,
所述创建单元,用于通过预处理接口创建关联多个SQL语句的缓冲区,所述缓冲区包括预处理PreparedStatement对象。
16.根据权利要求13-15任一项所述的装置,其特征在于,
所述处理单元,用于通过追加接口将所述多个SQL语句逐个填充到所述缓冲区。
17.根据权利要求13-16任一项所述的装置,其特征在于,所述多个SQL语句的操作类型包括增加、删除或修改中的至少一种。
18.根据权利要求13-17任一项所述的装置,其特征在于,所述请求中还包括目标消息码,所述目标消息码指示所述请求中包含所述多条SQL语句。
19.根据权利要求13-18任一项所述的装置,其特征在于,所述方法还包括:
所述处理单元,还用于释放所述缓冲区。
20.一种处理结构化查询语言SQL语句的装置,其特征在于,包括:
接收单元,用于接收数据库连接组件发送的请求,所述请求包括多个SQL语句以及所述多个SQL语句中每个SQL语句所绑定的参数,所述参数用于指示所述每个SQL语句所操作数据的位置和值;
处理单元,用于按照所述接收单元接收的请求中的每个SQL语句所绑定的参数所指示的位置和值,执行所述每个SQL语句的操作类型所对应的操作;
发送单元,用于在所述处理单元执行操作后,向所述数据库连接组件返回操作响应。
21.根据权利要求20所述的装置,其特征在于,
所述处理单元,还用于在所述请求中还包括目标消息码,所述目标消息码指示所述请求中包含所述多条SQL语句时,根据所述目标消息码,从所述请求中逐条解析出所述多条SQL语句中的每个SQL语句以及所述每个SQL语句所绑定的参数。
22.根据权利要求20或21所述的装置,其特征在于,
所述处理单元,还用于释放用于处理所述请求的资源。
23.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-8任一项所述的方法。
24.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求9-12任一项所述的方法。
25.一种芯片系统,其特征在于,包括至少一个处理器和接口,所述接口用于接收数据和/或信号,所述至少一个处理器被配置为用于执行如权利要求1-8任一项所述的方法。
26.一种芯片系统,其特征在于,包括至少一个处理器和接口,所述接口用于接收数据和/或信号,所述至少一个处理器被配置为用于执行如权利要求9-12任一项所述的方法。
27.一种计算机程序产品,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-8任一项所述的方法。
28.一种计算机程序产品,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求9-12任一项所述的方法。
CN202110596051.5A 2021-05-29 2021-05-29 一种处理结构化查询语言sql语句的方法及相应设备 Pending CN115408414A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110596051.5A CN115408414A (zh) 2021-05-29 2021-05-29 一种处理结构化查询语言sql语句的方法及相应设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110596051.5A CN115408414A (zh) 2021-05-29 2021-05-29 一种处理结构化查询语言sql语句的方法及相应设备

Publications (1)

Publication Number Publication Date
CN115408414A true CN115408414A (zh) 2022-11-29

Family

ID=84154929

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110596051.5A Pending CN115408414A (zh) 2021-05-29 2021-05-29 一种处理结构化查询语言sql语句的方法及相应设备

Country Status (1)

Country Link
CN (1) CN115408414A (zh)

Similar Documents

Publication Publication Date Title
Ruan et al. {INSIDER}: Designing {In-Storage} Computing System for Emerging {High-Performance} Drive
CN109690524B (zh) 分布式事件处理系统中的数据序列化
CN106130759B (zh) 面向服务的模块化系统体系架构
US20140089294A1 (en) Sql generation for assert, update and delete relational trees
CN108536761A (zh) 报表数据查询方法及服务器
US20170289059A1 (en) Container-based mobile code offloading support system in cloud environment and offloading method thereof
KR20140112427A (ko) 아파치 하둡을 위한 로우 레이턴시 쿼리 엔진
US10452655B2 (en) In-memory cursor duration temp tables
US20190361999A1 (en) Data analysis over the combination of relational and big data
US20150193526A1 (en) Schemaless data access management
CN110990425A (zh) 硬件数据库的jdbc驱动方法及装置
WO2021050254A1 (en) Automatic derivation of shard key values and transparent multi-shard transaction and query support
Ganelin et al. Spark: Big data cluster computing in production
US11074248B2 (en) Map of operations for ingesting external data
US10108682B2 (en) Query-level access to external petabyte-scale distributed file systems
Yan et al. Systems for Big Graph Analytics
Chandramouli et al. Quill: Efficient, transferable, and rich analytics at scale
Chakraborty et al. Skyhook: towards an arrow-native storage system
WO2023278943A1 (en) Registering additional type systems using a hub data model for data processing
CN115408414A (zh) 一种处理结构化查询语言sql语句的方法及相应设备
Bradberry et al. Practical Cassandra: a developer's approach
US11914556B2 (en) Lazy virtual filesystem instantiation and caching
US20200356538A1 (en) Container-based virtualization for testing database system
US11562027B1 (en) Self-service data provisioning system
US11663216B2 (en) Delta database data provisioning

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