CN113886415A - 分布式存储过程的运行方法、电子设备及存储介质 - Google Patents
分布式存储过程的运行方法、电子设备及存储介质 Download PDFInfo
- Publication number
- CN113886415A CN113886415A CN202010636364.4A CN202010636364A CN113886415A CN 113886415 A CN113886415 A CN 113886415A CN 202010636364 A CN202010636364 A CN 202010636364A CN 113886415 A CN113886415 A CN 113886415A
- Authority
- CN
- China
- Prior art keywords
- sql
- instruction
- engine
- result
- storage process
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
-
- 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/242—Query formulation
-
- 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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例涉及数据库领域,公开了一种分布式存储过程的运行方法、电子设备及存储介质。本发明中的分布式存储过程的运行方法,包括:获取存储过程中的第一结构化查询语言SQL指令;判断第一SQL指令中SQL指令的类型,获得第一判断结果;若第一判断结果指示所述第一SQL指令中存在非游标的查询类SQL指令,则生成第一处理请求,第一处理请求包括非游标的查询类SQL指令以及返回结果集信息的返回指示信息;向SQL处理引擎发送所述第一处理请求,以供所述SQL处理引擎向存储过程引擎返回述非游标的查询类SQL指令的结果状态以及结果集信息。采用本实施例中的分布式存储过程的运行方法,提高了分布式存储过程的运行效率。
Description
技术领域
本发明实施例涉及数据库领域,特别涉及一种分布式存储过程的运行方法、电子设备及存储介质。
背景技术
存储过程(英文:Stored Procedure)是存储于数据库系统中的一组能够完成特定功能的语句集,存储过程经过第一次编译后,在后续调用时无需再次编译,用户可以通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来运行存储过程。分布式数据库系统中通常包括存储过程引擎和结构化查询语言(Structured Query Language,简称“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指令的处理速度,提升了整个存储过程的运行效率。
附图说明
一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定。
图1是现有的分布式数据库的架构示意图;
图2是现有存储过程运行的交互示意图;
图3是根据本发明第一实施例中的分布式存储过程的运行方法的流程图;
图4是根据本发明第二实施例中的分布式存储过程的运行方法的流程图;
图5是根据本发明第三实施例中的运行非游标的查询类SQL指令的存储过程的交互示意图;
图6是根据本发明第三实施例中的运行游标中的查询类SQL指令的存储过程的交互示意图;
图7是根据本发明第三实施例中运行游标中的查询类SQL指令的存储过程的交互示意图;
图8是根据本发明第三实施例中的分布式存储过程的运行方法中获取该第一SQL指令的示意图;
图9是根据本发明第三实施例中的分布式存储过程的运行方法中对错误信息处理的示意图;
图10是根据本发明第四实施例中的电子设备的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的各实施例进行详细的阐述。然而,本领域的普通技术人员可以理解,在本发明各实施例中,为了使读者更好地理解本申请而提出了许多技术细节。但是,即使没有这些技术细节和基于以下各实施例的种种变化和修改,也可以实现本申请所要求保护的技术方案。以下各个实施例的划分是为了描述方便,不应对本发明的具体实现方式构成任何限定,各个实施例在不矛盾的前提下可以相互结合相互引用。
在分布式数据库中,存在多个数据存储结点,SQL处理引擎以及存储过程引擎。目前的存储过程的运行如图1、2所示。
图1为分布式数据库的架构示意图。该分布式数据库包括多个存储结点,如,DB_1、DB_2……DB_n。用户的发起的执行存储过程的执行请求发送至SQL处理引擎,由SQL处理引擎、存储过程引擎、数据存储结点以及元数据管理进行协助,完成存储过程的执行,元数据管理用于管理元数据,其中,数据存储结点可以为存储设备。下面结合图2介绍目前SQL处理引擎与存储过程引擎之间的交互过程。
SQL处理引擎执行步骤S01:向存储过程引擎发送该执行存储过程的请求。
存储过程引擎执行步骤S02:存储过程引擎执行该存储过程,检测存储过程中的SQL指令。
存储过程引擎执行步骤S03:根据检测到的SQL指令,重构出完整的SQL指令,可以以消息的形式发送至SQL处理引擎,等待SQL处理引擎执行该SQL指令的执行结果。
SQL处理引擎执行步骤S04:接收存储过程引擎发送的SQL指令。
SQL处理引擎执行步骤S05:SQL处理引擎完成对接收的SQL语句的执行,将执行的结果状态作为响应发给SQL处理引擎。
存储过程引擎执行步骤S06:收到SQL执行结果状态后,根据该结果状态,判断是否需要向SQL处理引擎请求一行的结果集,如是,则发送请求。
SQL处理引擎执行步骤S07:SQL处理引擎将一行的结果集作为响应发送给存储过程引擎。如果存储过程引擎需要多行的结果集,则多次进行上述的获取步骤,即每需要获取一行结果集就执行步骤S06和步骤S07。
存储过程引擎执行步骤S08:执行完当前的SQL指令的结果集,通知SQL处理引擎释放对应的结果集。SQL处理引擎重复执行下一条SQL指令,即重复步骤S03至步骤S08。
存储过程引擎执行步骤S09:执行完存储过程后,将出参、出入参拼接到消息中,作为最终响应发送给SQL处理引擎。SQL处理引擎将最终结果返回给用户。
存储过程执行中,SQL的结果集从SQL处理引擎传递到存储过程引擎中,若SQL处理引擎与存储过程引擎之间交互次数多,会导致频繁访问网络。
可见,现在的交互方式中若存储过程引擎每执行一行的结果集时,需要向SQL处理引擎发送一次获取请求,由SQL处理引擎返回的结果集,若需要多行的结果集,SQL处理引擎与存储过程引擎之间的交互次数多,影响执行存储过程的效率。
本发明的第一实施例涉及一种分布式存储过程的运行方法,应用于存储过程引擎,其流程如图3所示。
步骤101:获取存储过程中的第一结构化查询语言SQL指令。
步骤102:判断第一SQL指令中SQL指令的类型,获得第一判断结果。
步骤103:若第一判断结果指示第一SQL指令中存在非游标的查询类SQL指令,则生成第一处理请求,第一处理请求包括非游标的查询类SQL指令以及返回结果集信息的返回指示信息。
步骤104:向SQL处理引擎发送第一处理请求,以供SQL处理引擎向存储过程引擎返回非游标的查询类SQL指令的结果状态以及结果集信息。
本发明实施例相对于现有技术而言,获取存储过程中的第一SQL指令后,对该第一SQL指令的类型进行判断,若第一SQL指令中存在非游标的查询类SQL指令,生成包含返回指示信息的第一处理请求,SQL处理引擎根据该第一处理请求,对该非游标的查询类SQL指令进行处理,该SQL处理引擎将处理的结果状态以及结果集直接返回该存储过程引擎,存储过程引擎即可对下一条第一SQL指令进行处理;由于存储过程引擎无需在接收到结果状态后,向SQL处理引擎逐行获取结果集,减少了存储过程引擎与SQL处理引擎获取之间的交互次数,减小了对非游标的查询类SQL指令的处理速度,提升了整个存储过程的运行效率。
本发明的第二实施例涉及一种分布式存储过程的运行方法,该分布式存储过程的运行方法应用于SQL处理引擎,其流程如图4所示:
步骤201:接收存储过程引擎发送的请求消息。
步骤202:判断请求消息中是否存在第一处理请求,获取第四判断结果,第一处理请求包括:非游标的查询类SQL指令以及返回结果集信息的返回指示信息。
步骤203:若第四判断结果指示存在所述第一处理请求,则向存储过程引擎返回非游标的查询类SQL指令的结果状态以及结果集信息。
本实施例提供的分布式存储过程的运行方法,SQL处理引擎在处理了请求消息中的指定的SQL指令,可以判断请求消息中是否存在第一处理请求,若存在第一处理请求,向存储过程引擎返回处理得到的结果状态以及结果集信息,由于无需等待存储过程引擎下一交互过程中的获取结果集的请求,减少了与存储过程交互的次数,且无需逐行将结果集返回存储过程引擎,进一步减少与存储过程引擎的交互次数,提高了执行存储过程的效率。
为了更好的理解第一实施例以及第二实施例,第三实施例将详细介绍该分布式存储过程运行的方法。
第三实施例中的分布式存储过程运行的方法,其运行过程如图5所示。
分布式数据库中,存在多个数据存储结点、存储过程引擎和SQL处理引擎。下面结合存储过程引擎和SQL处理引擎之间的交互图5,具体介绍分布式存储过程的运行过程。
SQL处理引擎执行步骤S11:向存储过程引擎发送该执行存储过程的请求。
具体地,用户的客户端向SQL处理引擎发起执行存储过程的执行请求,SQL处理引擎在处理该执行请求时,向存储过程引擎发送该执行存储过程的请求。
存储过程引擎执行步骤S12:获取存储过程中的第一结构化查询语言SQL指令。
具体地,存储过程引擎执行该存储过程中,获取执行该存储过程中的一条SQL指令,可以将该条SQL指令作为第一SQL指令,也可以将执行存储过程中的获取的多条SQL指令作为第一SQL指令,也就是说第一SQL指令可以包含一条SQL指令,也可以包含至少两条SQL指令。
存储过程引擎执行步骤S13:判断第一SQL指令中SQL指令的类型,获得第一判断结果。
具体地,本示例中SQL指令的类型可以包括:常规SQL指令,非游标的查询类SQL、游标中的查询类SQL指令、游标中的常规SQL指令。SQL处理引擎执行该非游标的查询类SQL指令后的结果包括三种:成功、失败以及结果集。存储过程引擎针对非游标的查询类SQL指令,需要执行SQL处理引擎返回的结果集。返回的结果集可以为一行或0行。针对游标中的查询类SQL指令,存储过程引擎需要延后执行结果集。在存储过程中执行游标的查询类SQL指令时,也需要结果集中的一行。而结果集包括0行、1行,多行这三种情况。常规SQL指令,不需要结果集,需要SQL返回的结果状态,如:成功的结果、失败的结果。
针对第一SQL指令中的每条SQL指令进行如下处理:根据该SQL指令及上下文信息,判断该SQL指令是否为非游标的查询类的SQL指令;例如,可以通过获取SQL指令的位置,未处于游标中,则属于非游标类的SQL指令,继续根据SQL指令的关键词,判断该是否属于查询类,经过两次判断,即可确定该SQL指令是否属于非游标的查询类SQL指令。可以理解的是,还可以采用其他的方式进行判断,此处不再一一列举。
存储过程引擎执行步骤S14:若第一判断结果指示第一SQL指令中存在非游标的查询类SQL指令,则生成第一处理请求,第一处理请求包括非游标的查询类SQL指令以及返回结果集信息的返回指示信息。
具体地,生成的第一处理请求中包括返回结果集信息的返回指示信息,例如,第一处理请求中可以携带“回应中是否带上结果集”的信息,若第一判断结果指示第一SQL指令中存在非游标的查询类SQL指令,则,“回应中是否带上结果集信息”的信息为true;该true信息即为返回指示信息;若第一判断结果指示第一SQL指令中不存在非游标的查询类SQL指令,则,“回应中是否带上结果集信息”的信息为false。结果集信息可以包括:执行该条第一SQL指令后得到的所有结果集,也可以是指定行数的结果集。
可以理解的是,第一处理请求中可以包括该非游标的查询类SQL指令;若第一SQL指令中具有多条SQL指令,那么该第一处理请求还可以包括第一SQL指令中的其他类型的SQL指令。
存储过程引擎执行步骤S15:向SQL处理引擎发送第一处理请求,以供SQL处理引擎向存储过程引擎返回非游标的查询类SQL指令的结果状态以及结果集信息。
具体地,根据第一处理请求,生成请求消息,该请求消息中可以包括该第一处理请求,还可以包括第一SQL指令中的其他SQL指令。
SQL处理引擎执行步骤S16:接收存储过程引擎发送的请求消息。
具体地,获取请求消息中的携带的SQL指令,处理该SQL指令,获取处理该SQL指令的结果状态以及对应的结果集信息。
SQL处理引擎执行步骤S17:判断请求消息中是否存在第一处理请求,获取第四判断结果,第一处理请求包括:非游标的查询类SQL指令以及返回结果集信息的返回指示信息。
具体地,第一处理请求中携带有返回指示信息,若请求消息中是否有返回指示信息,则可以判定请求消息中存在第一处理请求,例如:查找到请求消息中的“回应中是否带上结果集信息”信息为true;则第四判断结果指示存在第一处理请求。
SQL处理引擎执行步骤S18:若第四判断结果指示存在第一处理请求,则向存储过程引擎返回非游标的查询类SQL指令的结果状态以及结果集信息。
在一个例子中,若第四判断结果指示存在第一处理请求,SQL处理引擎获取非游标的查询类SQL指令的结果集;判断非游标的查询类SQL指令的结果集的行数是否大于1,若是,则生成错误信息。若非游标的查询类SQL指令的结果集的行数小于或等于1,则构造一个新的种类的状态消息,该新的状态消息中包含执行非游标的查询类SQL指令的结果状态和结果集信息;结果集信息可以包括:执行该条第一SQL指令后得到的所有结果集,也可以是指定行数的结果集。
在另一个例子中,若第四判断结果指示不存在第一处理请求,则按照已有方式构造状态消息。
按照上述步骤S11至步骤S18,继续执行下一条SQL指令,直至完成本次存储过程的所有指令。
存储过程引擎执行步骤S19:完成当前的SQL指令的结果集,通知SQL处理引擎释放对应的结果集。SQL处理引擎重复执行下一条第一SQL指令,即重复步骤S13至步骤S18。
存储过程引擎执行步骤S20:向SQL处理引擎发送存储过程执行结果的消息。
具体地,存储过程引擎执行完存储过程后,将出参、出入参拼接到消息中,作为最终响应发送给SQL处理引擎;SQL处理引擎将最终结果返回给用户的客户端。
本实施例中还提供了运行游标中的查询类SQL指令的存储过程的方式。下面结果交互图6、图7介绍。
SQL处理引擎执行步骤S21:向存储过程引擎发送该执行存储过程的请求。
与步骤S11类似,此处不再赘述。
存储过程引擎执行步骤S22:获取存储过程中的第一结构化查询语言SQL指令。
具体地,存储过程引擎执行该存储过程中,获取执行该存储过程中的一条SQL指令,可以将该SQL指令作为第一SQL指令,也可以将执行存储过程中的多条SQL指令作为第一SQL指令,也就是说第一SQL指令可以包含一条SQL指令,也可以包含至少两条SQL指令。
存储过程引擎执行步骤S23:判断第一SQL指令中SQL指令的类型,获得第一判断结果。
该步骤与步骤S13大致相同,此处不再赘述。
存储过程引擎执行步骤S24:若第一判断结果指示第一SQL指令中存在游标中的查询类SQL指令,则向SQL处理引擎发送第二处理请求,第二处理请求包括游标中的查询类SQL指令,以供SQL处理引擎返回状态消息,状态消息包括游标中的查询类SQL指令的结果状态。
具体地,针对第一SQL指令中的SQL指令进行如下处理:根据该SQL指令及上下文信息,判断该SQL指令是否为游标的查询类的SQL指令;例如,可以通过获取SQL指令的位置,若该SQL指令处于游标中,则属于游标类的SQL指令,根据SQL指令的关键词,判断该SQL指令是否属于查询类,经过两次判断,即可确定该SQL指令是否属于游标中的查询类SQL指令。可以理解的是,还可以采用其他的方式进行判断,此处不再一一列举。
第一判断结果指示第一SQL指令中存在游标中的查询类SQL指令,则可以生成请求消息,该请求消息中可以包括该第二处理请求、第一SQL指令中的其他SQL指令。
SQL处理引擎执行步骤S25:接收存储过程引擎发送的请求消息。
具体地,获取请求消息中的携带的SQL指令,处理该SQL指令,可以获取处理该SQL指令的结果状态以及对应的结果集。
SQL处理引擎执行步骤S26:判断请求消息中是否存在第一处理请求,获取第四判断结果,第一处理请求包括:非游标的查询类SQL指令以及返回结果集信息的返回指示信息。
具体地,第一处理请求中携带有返回指示信息,若请求消息中有返回指示信息,则可以判定请求消息中存在第一处理请求,例如:查找到请求消息中的“回应中是否带上结果集信息”信息为false;该第四判断结果指示不存在第一处理请求。若检测出包括游标中的查询类SQL指令,则第四判断结果指示存在第二处理请求。可以理解的是,第二处理请求中还可以包括第二处理请求的标识信息,以便该SQL处理引擎可以根据该标识信息,判断是否存在第二处理请求。
SQL处理引擎执行步骤S27:若第四判断结果指示存在第二处理请求,第二处理请求包括游标中的查询类SQL指令,则获取游标中的查询类SQL指令的结果状态以及结果集中的容量信息。
具体地,若处理第二请求后,获得的结果是结果集时,SQL处理引擎计算结果集的总行数或一行的结果集的大小。结果集的容量信息可以包括获得的结果集的总行数或一行的结果集的大小的信息,SQL处理引擎发送给存储过程引擎的状态消息中带上结果集的容量信息。
SQL处理引擎执行步骤S28:向存储过程引擎返回状态消息,状态消息包括游标中的查询类SQL指令的结果状态以及结果集中的容量信息,以供存储过程引擎向所述SQL处理引擎发送获取n行的结果集的第一获取请求。
存储过程引擎执行步骤S29:判断接收的状态消息中是否存在结果集的容量信息,获取第二判断结果。
存储过程引擎执行步骤S30:若第二判断结果指示状态消息中存在结果集的容量信息,则向SQL处理引擎发送获取n行的结果集的第一获取请求,以供SQL处理引擎返回n行的结果集,n为大于1的整数。
具体地,存储过程引擎向SQL处理引擎请求n行的结果集可以根据存储过程引擎根据容量信息中的总行数或一行结果集的大小设置n的值,也可以同时根据内存、网络因素动态设定n的值,n为大于1的整数。
SQL处理引擎执行步骤S31:响应于第一获取请求,向存储过程引擎返回n行的结果集。
具体地,如果对结果集中剩余结果集行数有n行(即剩余结果集行数大于等于n行),就向存储过程引擎回应n行的结果集;如没有n行,则回应实际行数的结果集。
存储过程引擎执行步骤S32:通知SQL处理引擎释放结果集。
若SQL处理引擎与存储过程引擎部署在同一个电子设备上时,执行步骤S21至步骤S26
SQL处理引擎执行步骤S27’:若第四判断结果指示存在第二处理请求,第二处理请求包括游标中的查询类SQL指令,向存储过程引擎发送游标中的查询类SQL指令的结果状态,以供存储过程引擎发送获取所有结果集的第二获取请求。
存储过程引擎还可以执行步骤S28’:若第二判断结果指示状态消息中不存在结果集的容量信息,则在存储过程引擎所处设备中检测是否存在SQL处理引擎,若是存在,则向SQL处理引擎发送获取所有结果集的第二获取请求,以供SQL处理引擎返回所有结果集的存储信息。
具体地,存储过程引擎检测所处的电子设备上是否存在SQL处理引擎,若是存在,表明存储过程引擎与SQL处理引擎被部署在同一个电子设备上。
SQL处理引擎执行步骤S29’:将游标中的查询类SQL指令的所有结果集写入SQL处理引擎所在设备的存储介质上,获取存储信息。
具体地,获取处理第二处理请求中游标中的查询类SQL指令的所有结果集,将该结果集存储在SQL处理引擎所在设备的存储介质上,例如,磁盘文件或共享内存上;获取该文件的存储位置。向存储过程引擎发送结果集所在的文件的存储位置。
SQL处理引擎执行步骤S30’:响应于第二获取请求,向存储过程引擎发送存储信息,以供存储过程引擎按照存储信息获取所有结果集。
存储过程引擎执行步骤S31’:按照存储信息获取所有结果集。
具体地,由于SQL处理引擎和存储过程引擎位于同一设备上,存储过程引擎按照存储位置查找存储的结果集,从文件中取用结果集,而不用反复向SQL处理引擎请求结果集,进一步减少SQL处理引擎与存储过程引擎之间的交互次数。
存储过程引擎执行步骤S32’:通知SQL处理引擎释放结果集。
按照上述步骤S21至步骤S32,或者步骤S21至步骤S32’,继续执行下一条SQL指令,直至完成本次存储过程的所有指令。
需要说明的是,在SQL处理引擎与存储过程引擎部署在不同设备或是同一个电子设备上时,都能采用步骤S21至步骤S32。
存储过程引擎执行步骤S33:向SQL处理引擎发送存储过程执行结果的消息。
具体地,存储过程引擎执行完存储过程后,将出参、出入参拼接到消息中,作为最终响应发送给SQL处理引擎;SQL处理引擎将最终结果返回给用户的客户端。
值得一提的是,对游标中的查询类SQL,将消息由传递单行结果集改为传递多行结果集消息,即从存储过程引擎向SQL处理引擎一次就请求多行结果集,SQL处理引擎向存储过程引擎回应多行结果集。
在一个例子中,第一SQL指令中还可以包括多个SQL指令,下面介绍获取该第一SQL指令的过程。其具体实现的示意图如图8所示。
步骤S40:获取当前执行存储过程中的第二SQL指令。
步骤S41:判断第二SQL指令是否属于游标中的常规SQL指令,获取第三判断结果,若第三判断结果指示第二SQL指令为游标中的常规SQL指令,则执行步骤S42;第三判断结果指示所述第二SQL指令属于目标类型,则执行步骤S43。
具体地,在存储过程引擎中,对可并行请求执行多个SQL指令,可以将多个SQL指令合并成一个请求消息。可并行请求的SQL指令满足如下条件:
(1)第m条SQL指令是游标中的常规SQL指令,而第m+1条SQL指令是一条常规SQL指令。可以同时向SQL处理引擎进行请求,m为大于0的整数。
(2)连续多个游标中的SQL指令,且没有查询Fetch操作。这些游标中的SQL可以同时向SQL处理引擎进行请求。
存储过程引擎在执行存储过程时,获取当前执行存储过程中的SQL指令,将获取的SQL指令作为第二SQL指令,该第二SQL指令为当前执行的一条SQL指令。
检测第二SQL指令是否属于游标中的常规SQL指令,若是,则缓存此游标中的查询类SQL指令,继续执行存储过程中下一条第二SQL指令,继续检测下一条第二SQL指令是否属于目标类型,目标类型可以包括:常规SQL指令,或者,游标中的查询类SQL指令,且该游标中任一条SQL指令未被发送至SQL处理引擎。
步骤S42:缓存第二SQL指令,继续返回获取下一条第二SQL指令的步骤。
步骤S43:将缓存区内的SQL指令以及第二SQL指令合并作为第一SQL指令。
在一个例子中,SQL处理引擎对错误信息的处理的具体实现的示意图如图9所示。
步骤S50:获取错误信息;
步骤S51:判断错误信息是否属于预设的错误类型,获取第五判断结果,若第五判断结果指示错误信息属于预设的错误类型,则执行步骤S52;否则,执行步骤S53。
具体地,预设的错误类型包括:SQL处理引擎本身在处理时出现的错误,如语法解析出错、内存不足、分发任务到下层DB出错、操作系统故障等;以及其它未识别的错误。
步骤S52:向存储过程引擎发送终止当前存储过程的终止请求,或者,向用户的客户端发送当前存储过程执行失败的提示信息。
具体地,SQL处理引擎向存储过程引擎发送终止当前存储过程的请求,或者,SQL处理引擎,直接向用户的客户端报告存储过程执行失败,并显示出错误信息。
步骤S53:将错误信息发送至存储过程引擎。
具体地,若不是预设的错误类型,则可以将错误信息发送至存储过程引擎,由该存储过程引擎按照定义中的错误处理方式进行处理。
例如,识别的错误类型为下层DB结点处理本SQL时返回的出错信息,如主键冲突,表不存在等,或者,识别错误信息为SQL处理引擎在处理从下层DB返回的结果集时正常出错,如没有下一条数据。以上两种类型的错误均可以发送至存储过程引擎。存储过程是由存储过程引擎根据存储过程定义中的错误处理方式进行处理。
值得一提的是,SQL处理引擎在处理SQL请求出错时,增加对错误信息进行识别处理,以判断是否将错误信息发送给存储过程引擎,便于减少SQL处理引擎与存储过程引擎的交互,并且减少存储过程引擎的处理。
此外,本领域技术人员可以理解,上面各种方法的步骤划分,只是为了描述清楚,实现时可以合并为一个步骤或者对某些步骤进行拆分,分解为多个步骤,只要包括相同的逻辑关系,都在本专利的保护范围内;对算法中或者流程中添加无关紧要的修改或者引入无关紧要的设计,但不改变其算法和流程的核心设计都在该专利的保护范围内。
本发明第四实施例涉及一种电子设备,如图10所示,包括:至少一个处理器401;以及,与至少一个处理器401通信连接的存储器402;其中,存储器402存储有可被至少一个处理器401执行的指令,指令被至少一个处理器401执行,以使至少一个处理器401能够执行上述的分布式存储过程的运行方法。
其中,存储器和处理器采用总线方式连接,总线可以包括任意数量的互联的总线和桥,总线将一个或多个处理器和存储器的各种电路连接在一起。总线还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路连接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口在总线和收发机之间提供接口。收发机可以是一个元件,也可以是多个元件,比如多个接收器和发送器,提供用于在传输介质上与各种其他装置通信的单元。经处理器处理的数据通过天线在无线介质上进行传输,进一步,天线还接收数据并将数据传送给处理器。
处理器负责管理总线和通常的处理,还可以提供各种功能,包括定时,外围接口,电压调节、电源管理以及其他控制功能。而存储器可以被用于存储处理器在执行操作时所使用的数据。
本发明第五实施例涉及一种计算机可读存储介质,存储有计算机程序。计算机程序被处理器执行时实现上述分布式存储过程的运行方法实施例。
即,本领域技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本领域的普通技术人员可以理解,上述各实施例是实现本发明的具体实施例,而在实际应用中,可以在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。
Claims (10)
1.一种分布式存储过程的运行方法,其特征在于,包括:
获取存储过程中的第一结构化查询语言SQL指令;
判断第一SQL指令中SQL指令的类型,获得第一判断结果;
若所述第一判断结果指示所述第一SQL指令中存在非游标的查询类SQL指令,则生成第一处理请求,所述第一处理请求包括所述非游标的查询类SQL指令以及返回结果集信息的返回指示信息;
向所述SQL处理引擎发送所述第一处理请求,以供所述SQL处理引擎向存储过程引擎返回所述非游标的查询类SQL指令的结果状态以及所述结果集信息。
2.根据权利要求1所述的分布式存储过程的运行方法,其特征在于,若所述第一判断结果指示存在游标中的查询类SQL指令,所述方法还包括:
向所述SQL处理引擎发送第二处理请求,所述第二处理请求包括所述游标中的查询类SQL指令,以供所述SQL处理引擎返回状态消息,所述状态消息包括所述游标中的查询类SQL指令的结果状态;
判断接收的所述状态消息中是否存在结果集的容量信息,获取第二判断结果;
若所述第二判断结果指示所述状态消息中存在所述结果集的容量信息,则向所述SQL处理引擎发送获取n行的结果集的第一获取请求,以供所述SQL处理引擎返回n行的结果集,n为大于1的整数;
若所述第二判断结果指示所述状态消息中不存在结果集的容量信息,则在所述存储过程引擎所处设备中检测是否存在所述SQL处理引擎,若是存在,则向所述SQL处理引擎发送获取所有结果集的第二获取请求,以供所述SQL处理引擎返回所有结果集的存储信息;按照所述存储信息获取所有结果集。
3.根据权利要求1或2所述的分布式存储过程的运行方法,其特征在于,所述获取存储过程中的第一结构化查询语言SQL指令,包括:
获取当前执行存储过程中的第二SQL指令;
判断所述第二SQL指令是否属于游标中的常规SQL指令,获取第三判断结果;
若所述第三判断结果指示所述第二SQL指令为游标中的常规SQL指令,则缓存所述第二SQL指令,继续返回获取下一条第二SQL指令的步骤;
若所述第三判断结果指示所述第二SQL指令属于目标类型,则将缓存区内的SQL指令以及所述第二SQL指令合并作为所述第一SQL指令,其中,所述目标类型包括常规SQL指令以及属于游标中的查询类SQL指令且所述游标对应的SQL指令未被发送至所述SQL处理引擎。
4.一种分布式存储过程的运行方法,其特征在于,包括:
接收存储过程引擎发送的请求消息;
判断所述请求消息中是否存在第一处理请求,获取第四判断结果,所述第一处理请求包括:非游标的查询类SQL指令以及返回结果集信息的返回指示信息;
若所述第四判断结果指示存在所述第一处理请求,则向所述存储过程引擎返回所述非游标的查询类SQL指令的结果状态以及所述结果集信息。
5.根据权利要求4所述的分布式存储过程的运行方法,其特征在于,若所述第四判断结果指示存在第二处理请求,所述第二处理请求包括所述游标中的查询类SQL指令,所述方法还包括:
获取所述游标中的查询类SQL指令的结果状态以及所述结果集中的容量信息;
向所述存储过程引擎返回状态消息,所述状态消息包括所述游标中的查询类SQL指令的结果状态以及所述结果集中的容量信息,以供所述存储过程引擎向所述SQL处理引擎发送获取n行的结果集的第一获取请求,n为大于1的整数;
响应于所述第一获取请求,向所述存储过程引擎返回n行的结果集。
6.根据权利要求4所述的分布式存储过程的运行方法,其特征在于,若所述第四判断结果指示存在第二处理请求,所述第二处理请求包括所述游标中的查询类SQL指令,所述方法还包括:
向所述存储过程引擎发送所述游标中的查询类SQL指令的结果状态,以供所述存储过程引擎发送获取所有结果集的第二获取请求;
将所述游标中的查询类SQL指令的所有结果集写入所述SQL处理引擎所在设备的存储介质上,获取存储信息;
响应于所述第二获取请求,向所述存储过程引擎发送所述存储信息,以供所述存储过程引擎按照所述存储信息获取所有结果集。
7.根据权利要求4至6中任一项所述的分布式存储过程的运行方法,其特征在于,包括:
获取错误信息;
判断所述错误信息是否属于预设的错误类型,获取第五判断结果;
若所述第五判断结果指示错误信息属于预设的错误类型,则向所述存储过程引擎发送终止当前存储过程的终止请求,或者,向用户的客户端发送当前存储过程执行失败的提示信息。
8.根据权利要求4所述的分布式存储过程的运行方法,其特征在于,在所述判断所述请求消息中是否存在第一处理请求,获取第四判断结果之后,所述方法还包括:
若所述第四判断结果指示存在所述第一处理请求,获取所述非游标的查询类SQL指令的结果集;
判断所述非游标的查询类SQL指令的结果集的行数是否大于1,若是,则生成错误信息。
9.一种电子设备,其特征在于,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如权利要求1至3中任一项所述的分布式存储过程的运行方法,或者,执行如权利要求4至8中任一项所述的分布式存储过程的运行方法。
10.一种计算机可读存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至3中任一项所述的分布式存储过程的运行方法,或者,执行如权利要求4至8中任一项所述的分布式存储过程的运行方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010636364.4A CN113886415B (zh) | 2020-07-03 | 2020-07-03 | 分布式存储过程的运行方法、电子设备及存储介质 |
PCT/CN2021/104518 WO2022002275A1 (zh) | 2020-07-03 | 2021-07-05 | 分布式存储过程的运行方法、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010636364.4A CN113886415B (zh) | 2020-07-03 | 2020-07-03 | 分布式存储过程的运行方法、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113886415A true CN113886415A (zh) | 2022-01-04 |
CN113886415B CN113886415B (zh) | 2023-02-07 |
Family
ID=79013318
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010636364.4A Active CN113886415B (zh) | 2020-07-03 | 2020-07-03 | 分布式存储过程的运行方法、电子设备及存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN113886415B (zh) |
WO (1) | WO2022002275A1 (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW535072B (en) * | 2000-09-07 | 2003-06-01 | Ibm | Method, system, and program for implementing scrollable cursors in a database |
CN109033209A (zh) * | 2018-06-29 | 2018-12-18 | 新华三大数据技术有限公司 | Spark存储过程处理方法及装置 |
CN110069565A (zh) * | 2017-11-16 | 2019-07-30 | 中兴通讯股份有限公司 | 一种分布式数据库数据批量处理的方法及装置 |
CN110704479A (zh) * | 2019-09-12 | 2020-01-17 | 新华三大数据技术有限公司 | 任务处理方法、装置、电子设备及存储介质 |
CN111259015A (zh) * | 2020-02-10 | 2020-06-09 | Oppo(重庆)智能科技有限公司 | 持续化数据存储方法与装置、电子设备 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7945551B1 (en) * | 2001-06-14 | 2011-05-17 | Oracle International Corporation | Redirection of misses in queryable caches |
CN104933190B (zh) * | 2015-07-10 | 2018-04-17 | 上海新炬网络信息技术股份有限公司 | 一种sql语句执行频次动态调整方法 |
CN110543495A (zh) * | 2019-08-29 | 2019-12-06 | 北京东方国信科技股份有限公司 | 游标遍历存储方法及装置 |
CN110795101B (zh) * | 2019-09-18 | 2024-01-30 | 平安科技(深圳)有限公司 | Sql代码信息显示方法、装置、计算机装置及存储介质 |
-
2020
- 2020-07-03 CN CN202010636364.4A patent/CN113886415B/zh active Active
-
2021
- 2021-07-05 WO PCT/CN2021/104518 patent/WO2022002275A1/zh active Application Filing
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW535072B (en) * | 2000-09-07 | 2003-06-01 | Ibm | Method, system, and program for implementing scrollable cursors in a database |
CN110069565A (zh) * | 2017-11-16 | 2019-07-30 | 中兴通讯股份有限公司 | 一种分布式数据库数据批量处理的方法及装置 |
CN109033209A (zh) * | 2018-06-29 | 2018-12-18 | 新华三大数据技术有限公司 | Spark存储过程处理方法及装置 |
CN110704479A (zh) * | 2019-09-12 | 2020-01-17 | 新华三大数据技术有限公司 | 任务处理方法、装置、电子设备及存储介质 |
CN111259015A (zh) * | 2020-02-10 | 2020-06-09 | Oppo(重庆)智能科技有限公司 | 持续化数据存储方法与装置、电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN113886415B (zh) | 2023-02-07 |
WO2022002275A1 (zh) | 2022-01-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8209697B2 (en) | Resource allocation method for a physical computer used by a back end server including calculating database resource cost based on SQL process type | |
CN101196912B (zh) | 用于应用程序状态同步的方法和设备 | |
CN109491928B (zh) | 缓存控制方法、装置、终端及存储介质 | |
CN111897638B (zh) | 分布式任务调度方法及系统 | |
US11550646B2 (en) | Method of verifying access of multi-core interconnect to level-2 cache | |
CN111581234B (zh) | Rac多节点数据库查询方法、装置及系统 | |
US20100100891A1 (en) | Method and system for data preparation and communication between software applications | |
WO2020098682A1 (en) | Systems and methods for managing shared database | |
CN113886415B (zh) | 分布式存储过程的运行方法、电子设备及存储介质 | |
US20050203863A1 (en) | Pre-fetch computer system | |
WO2022111707A1 (en) | Method and apparatus for distributed database transactions using global timestamping | |
US6976040B2 (en) | System and method of data-management and data-management program | |
CN107679093B (zh) | 一种数据查询方法及装置 | |
US20090183172A1 (en) | Middleware Bridge System And Method | |
US11709832B2 (en) | Information processing system, information processing device, and non-transitory computer-readable storage medium | |
US11741097B2 (en) | Tree structure data processing system, tree structure data processing method, tree structure data processing device, and tree structure data processing program | |
KR100597829B1 (ko) | 온톨로지를 이용한 비즈니스 규칙시스템 및 그 서비스 방법 | |
JP6961133B1 (ja) | 検索装置、検索方法、及び、検索プログラム | |
CN112395316B (zh) | 一种数据查询方法及装置 | |
EP4209923A1 (en) | Method for sharing prepare statement, system, network device, and storage medium | |
US20220237491A1 (en) | Quantum process termination | |
CN118069648A (zh) | 执行计划的处理方法、装置、设备和介质 | |
KR100323588B1 (ko) | 이기종 다중 데이터베이스 시스템에서의 대리 프로세서 관리 방법 | |
CN117349372A (zh) | 数据库会话查杀方法、装置、电子设备和存储介质 | |
CN117216029A (zh) | 一种数据迁移的兼容检测方法及终端 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20211231 Address after: 100176 floor 18, building 8, courtyard 10, KEGU 1st Street, Beijing Economic and Technological Development Zone, Daxing District, Beijing (Yizhuang group, high-end industrial area of Beijing Pilot Free Trade Zone) Applicant after: Jinzhuan Xinke Co.,Ltd. Address before: 518057 Zhongxing building, science and technology south road, Nanshan District hi tech Industrial Park, Guangdong, Shenzhen Applicant before: ZTE Corp. |
|
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |