CN110121704B - 一种用于存储过程的执行方法、设备以及系统 - Google Patents
一种用于存储过程的执行方法、设备以及系统 Download PDFInfo
- Publication number
- CN110121704B CN110121704B CN201680091865.0A CN201680091865A CN110121704B CN 110121704 B CN110121704 B CN 110121704B CN 201680091865 A CN201680091865 A CN 201680091865A CN 110121704 B CN110121704 B CN 110121704B
- Authority
- CN
- China
- Prior art keywords
- execution
- sql
- sql statement
- statement
- 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.)
- Active
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/21—Design, administration or maintenance of databases
-
- 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/2452—Query translation
- G06F16/24524—Access plan code generation and invalidation; Reuse of access plans
-
- 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
- G06F16/244—Grouping and aggregation
-
- 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
- G06F16/2443—Stored procedures
-
- 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
- G06F16/24552—Database cache management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种存储过程的执行方法,涉及数据库技术领域,尤其涉及数据库中存储过程(StoredProcedure,SP)的处理技术。所述执行方法包括:接收执行请求,所述执行请求用于请求执行包含至少两个存储过程的任务:申请至少两个线程,将所述任务中每个存储过程分配给所述至少两个线程中的一个线程执行:接收所述至少两个线程在执行所述任务包含的存储过程时发送的SQL语句,并将所述接收到的SQL语句按照相同的访问特性分组缓存:对于满足预设触发条件的SQL语句缓存分组,调用SQL语句执行引擎执行所述SQL语句缓存分组中的SQL语句。将上述方案应用到多个存储过程的执行,能够提升多个存储过程的执行效率。
Description
技术领域
本发明涉及数据库技术领域,尤其涉及一种用于存储过程的执行方法、设备以及数据库管理系统。
背景技术
存储过程(英文全称:Stored Procedure,简称:SP)是一种可由应用程序(Application)调用的子程序(Subroutine),它由一组为了完成特定功能的SQL(英文全称:Structured Query Language,简称:SQL)语句以及程序语句(如:逻辑控制语句、变量赋值语句、以及表达式运算语句等)构成。存储过程一般存储在数据库(英文全称:Database,简称:DB)中。被创建的存储过程只需要进行一次编译(Compile),后续就可通过指定存储过程的名称以及参数调用。在存储过程执行结束之后,会返回结果集合(Result Sets)。这些结果集合能够被其他的存储过程使用,或者被应用程序使用。
相比于SQL语句,存储过程具有网络流量少、代码重用性高、安全性能好以及执行效率高等特点,因此,在数据库系统中有着广泛的应用。现有技术中,执行存储过程需为该存储过程分配一条线程,该线程顺序执行该存储过程的语句,当执行到程序语句时,调用数据库管理系统中程序语句执行器执行;当执行到SQL语句时,调用数据库管理系统中SQL执行引擎执行该SQL语句,在等待该SQL语句执行结果的过程中,该线程处于等待状态。当接收到该SQL语句的执行结果后,该线程才会被唤醒,并继续执行存储过程其他的语句。
由上可看出,现有技术采用的执行方式执行效率低,无法适用于包含多个存储过程的任务的执行。例如:当用户使用信用卡消费,数据库管理系统判断该交易是否存在风险的过程会涉及上千个存储过程的调用,而为了不影响用户体验,系统对该判断过程的时延要求非常高,因此,在执行包含多个存储过程的任务时,如何提高这类任务的执行效率就成为亟待解决的问题。
发明内容
鉴于此,本发明实施例提供一种用于存储过程的执行方法、设备以及数据库管理系统,以提升包含多个存储过程的任务的执行效率。
一方面,本发明的实施例提供一种用于存储过程的执行方法,应用于数据库管理系统。具有代表性的数据管理系统有:Oracle、Microsoft SQL Server、Access、MySQL及PostgreSQL等。该执行方法包括:接收执行请求,所述执行请求用于请求执行包含至少两个存储过程的任务;申请至少两个线程,将所述任务中每个存储过程分配给所述至少两个线程中的一个线程执行;接收所述至少两个线程在执行所述任务包含的存储过程时发送的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语句缓存队列中SQL语句的个数达到设定数量阈值。采用这两种预设触发条件能够从时间上或者SQL语句的数量上触发SQL语句执行引擎的调用,是两种比较常用的触发方式。设定时间阈值以及设定数量阈值可以由数据库管理系统的管理员根据经验来设定。
在另一种可能的设计中,预设触发条件为:所述SQL语句缓存队列中SQL语句的个数达到设定数量阈值,且所述SQL语句缓存队列存续时间不超过设定时间阈值。采用这种实现方式,和单纯采用设定数量阈值的触发方式相比,能够避免因某一访问特性的SQL语句数量太少而迟迟无法触发该SQL语句执行的问题,提高本发明的执行方法实施例方案的鲁棒性。
在另一种可能的设计中,所述方法还包括:接收所述至少两个线程在执行所述任务包含的存储过程时发送的程序语句,调用程序语句执行器对所述程序语句执行。在存储过程执行过程中,除了SQL语句的执行,还包括程序语句(如:逻辑控制语句、变量赋值语句、以及表达式运算语句等)的执行。在本发明的实施例中,采用数据库管理系统中的程序语句执行器(Procedural Statement Executor)执行。
在另一种可能的设计中,所述方法还包括:在接收所述至少两个线程在执行所述任务包含的存储过程时发送的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语句缓存到与之特性相同的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语句和执行线程的对应关系,记录这种对应关系可以采用表(Table)这种数据结构。
在另一种可能的设计中,所述SQL调用执行单元还用于:当接收到所述SQL语句执行引擎执行所述任务包含的SQL语句返回的执行结果后,根据所述待执行SQL语句和执行线程的对应关系,将所述执行结果返回给所述SQL语句对应的执行线程。
在另一种可能的设计中,SQL调用执行单元将SQL语句的执行结果以及程序调用执行单元将程序语句的执行结果返回给执行该存储过程的线程,从而该线程能够根据上述语句的执行结果得到该存储过程的结果,完成整个存储过程的执行过程。如上包括至少两个存储过程的任务的执行在每个存储过程执行完都会有处理该存储过程的线程得到存储过程的执行结果,当该任务所包含的至少两个存储过程均执行完后,根据这些存储过程的执行结果,可以最终得到该任务的执行结果。
又一方面,本发明实施例还提供一种数据库管理系统,包括:处理器、存储器、通信接口和总线;所述处理器、所述存储器和所述通信接口通过所述总线通信;所述存储器用于存储执行指令,所述通信接口用于与客户端通信;当所述客户端发送执行请求,所述执行请求用于请求执行至少两个存储过程时,所述处理器执行所述存储器存储的所述执行指令,以使所述数据库管理系统执行如第一方面任一所述的执行方法。
再一方面,本发明实施例提供了一种计算机程序产品,其中,所述计算机程序产品包括计算机程序代码,当所述计算机程序代码被一个计算机执行的时候,所述计算机程序代码可以使得所述计算机执行如第一方面任一所述的执行方法中任意一项的步骤。
再一方面,本发明实施例提供了一种计算机可读存储介质,其中,所述计算机存储计算机程序代码,当所述计算机程序代码被一个计算机执行的时候,所述计算机程序代码可以使得所述计算机执行如第一方面任一所述的执行方法中任意一项的步骤。
相较于现有技术,本发明提供的方案能够较大程度地提升多个存储过程的执行效率。
附图说明
下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
图1A为本发明实施例所应用的计算机体系架构示意图。
图1B为本发明实施例所应用的一种存储过程分布式执行举例的示意图。
图2为本发明实施例所应用的数据库处理架构的示意图。
图3为本发明实施例所提供的一种超级存储过程结构示意图。
图4为本发明实施例提供的一种存储过程执行方法的流程示意图。
图5为本发明实施例所提供的存储过程执行设备的组成示意图。
图6为本发明实施例所提供的数据库管理系统的组成示意图。
具体实施方式
下面结合附图,对本发明实施例中的技术方案进行清楚地描述。
本发明实施例描述的系统架构以及业务场景是为了更加清楚地说明本发明实施例的技术方案,并不构成对于本发明实施例提供的技术方案的限定,本领域普通技术人员可知,随着系统架构的演变和新业务场景的出现,本发明实施例提供的技术方案对于类似的技术问题,同样适用。
本发明的实施例可包括或者利用专用计算机或者通用计算机,其中通用计算机包括:计算机硬件,例如,一个或者多个处理器,存储器等。本发明的实施例也包括存储有计算机可读指令以及数据结构的计算机可读介质。这些计算机可读介质可以是能够被通用计算机系统或者专用计算机系统访问的任意类型的可用介质。存储计算机可执行指令的计算机可读介质是计算机存储介质(设备)。实现计算机可执行指令的计算机可读介质是传输介质。因此,作为示例但非限制,本发明的各实施例可包括至少两种完全不同种类的计算机可读介质:计算机存储介质(设备)和传输介质。
计算机存储介质包括RAM(Random Access Memory,随机存取存储器)、ROM(Read-Only Memory,只读存储器)、EEPROM(Electrically-Erasable Programmable Read-OnlyMemory,电可擦可编程只读存储器)、CD-ROM(Compact Disc Read-Only Memory,只读光盘)、SSD(Solid State Disk,固态硬盘)、Flash闪存、PCM(Phase-change memory,相变存储器)、以及其他类型的主存、其他光盘存储器、磁盘存储器,或者任何类型的以计算机可执行指令或者数据结构存在的能够存储计算机代码的存储介质,且这些计算机可执行指令或者数据结构能够被通用计算机或者专用计算机访问。
“网络”被定义为计算机系统、或者模块、或者其他电子设备之间能够用来传输电子数据的一个或者多个数据连接。当信息在网络或者其他类型的通信连接传输(可以是:有线、无线、或者有线和无线结合)到一台计算机时,计算机将这些连接看成是传输的媒介。传输媒介包括:网络和/或数据连接能够携带以计算机可执行指令以及数据结构形式存在的程序代码,这些程序代码能够被通用计算机以及专用计算机访问。上述的组合应当也被包括在计算机可读介质的范围内。
此外,在到达各种计算机系统组件之后,计算机可执行指令或数据结构形式的程序代码装置可以从传输介质自动传输到计算机存储介质(设备)。例如:通过网络或数据连接接收到的计算机可执行指令或数据结构可被缓存在网络接口模块(例如:网络接口控制器,英文全称:Network Interface Controller,英文简称:NIC)内的RAM中,然后被传输到计算机系统的主存中和/或计算机系统出的非易失性(Non-volatile)的计算机存储介质(设备)。因而,应当理解,计算机存储介质(设备)可被包括在还利用传输介质的计算机系统组件中。
计算机可执行指令包括:当在处理器执行时,使通用计算机、专用计算机、或专用处理设备执行某一功能或某组功能的指令和数据。计算机可执行指令可以是例如二进制代码、或诸如汇编语言这样的中间格式指令、或是源代码。尽管已经对于结构特征和/或方法动作特定的语言描述了主题,但是应当理解,在所附权利要求中定义的主题不必受限于上述的特征或上述动作。相反,所述特征和动作被公开作为实现权利要求的示例形式。
本领域的技术人员可以理解,本发明可以在具有许多类型的计算机系统配置的网络计算环境中实践,这些计算机系统配置包括个人计算机、台式计算机、笔记本电脑、消息处理器、手持式设备、多处理器系统、基于微处理器的或者可编程消费电子设备、网络PC、小型计算机、大型计算机、移动电话、PDA(Personal Digital Assistant,个人数字助理)、平板、寻呼机、路由器、交换机等等。本发明也可以在分布式系统环境中实现,在分布式系统环境中,通过网络连接(通过有线数据链路、或无线数据链路、或通过有线链路和无线链路的组合)的本地和远程计算机系统两者均执行任务。在分布式系统环境中,程序模块可位于本地存储器和/或远程存储设备中。
本发明各实施例还可以在云计算环境中实现。在本发明的实施例中,“云计算”被定义为用于允许对可配置计算资源的共享池采用按需网络访问的模型。例如:云计算可由运营商或者服务提供商部署,以提供对计算资源的共享池进行可配置以及按需形式的访问。计算资源的共享池包括处理器资源、存储资源以及网络资源,这些资源经由虚拟化而能够被配置使用,并且在服务完成之后可以通过和运营商或者服务提供商的交互来释放,从而对计算资源的管理和维护更加灵活简单。
云计算模型可由各种特性组成,诸如按需自服务(英文:On-demand Self-service)、广泛网络访问(英文:Broad Network Access)、资源池(英文:ResourcePooling)、快速灵活性(英文:Rapid Elasticity)、可衡量的服务(英文:MeasuredService)等。云计算模型还可展现各种服务模型,诸如软件即服务(英文:Software as aService,缩写:SAAS)、平台即服务(英文:Platform as a service,缩写:PAAS)以及基础架构即服务(英文:Infrastructure as a Service,缩写:IAAS)。云计算模型还可以使用不同的部署模型来部署,诸如私有云、社区云、公有云、混合云等。
本发明实施例的运行环境
如图1A所示,是应用于本发明各实施例的进行存储过程创建以及执行的示意性的计算机体系结构100,包括:客户端110、数据库服务器120、存储器130、数据库协调器140以及数据库150。客户端110、数据库服务器120、存储器130、数据库协调器140以及数据库150中的每一个都可通过网络彼此相连(或构成网络的一部分),所述网络例如是局域网(英文全称:Local Area Network,简称:LAN)、广域网(英文全称:Wide Area Network,简称:WAN)、或者因特网(英文:Internet)。客户端110、数据库服务器120、存储器130、数据库协调器140以及数据库150以及任何其他连接的计算机系统及其组件都可以创建包括相关数据的消息并通过网络交换这些消息(例如:网际协议Internet Protocol(IP)数据报以及利用IP数据报的其他更高层的协议,例如:传输控制协议(英文全称:Transmission ControlProtocol,简称:TCP)、超文传输协议(英文全称:Hypertext Transfer Protocol,简称:HTTP)、简单邮件传输协议(英文全称:Simple Mail Transfer Protocol,简称:SMTP)等,或者使用其他非数据报协议)。
客户端110具体可以为数据库客户端。客户端110可提供用于和数据库150中存储的数据进行交互的用户界面。结合本发明的实施例,在存储过程创建阶段,客户端110将创建存储过程的请求发送给数据库服务器120。该存储过程创建请求可包括待创建存储过程所使用的名称以及存储过程内部所包含的需要被执行的存储过程语句。在存储过程执行阶段,客户端110可以发送多个存储过程的执行请求,其中,执行请求携带有待调用的存储过程的名称以及参数。作为举例,图1A仅示出了一个客户端110,可以理解,在实际场景下,可以包括多个客户端。结合本发明的实施例,由客户端发送的多个存储过程的执行请求,可以来源于同一个客户端,或者分别来源于不同的客户端。客户端110在具体实现中,可以是运行在计算机上的一个应用程序,或者是一台计算机,对此,本发明的实施例不加以限制。
数据库服务器120:在存储过程创建阶段,当接收到客户端110发送的存储过程创建请求之后,根据客户端110发送的存储过程语句创建可执行过程,然后,数据库服务器120可将存储过程的名称以及可执行过程存储在存储器130中。在存储过程执行阶段,当客户端110发送的存储过程的执行请求到达数据库服务器120时,数据库服务器120会请求操作系统分配处理资源,在得到处理资源后,从存储器130中读取待执行的存储过程,完成存储过程的执行。实际执行中,对于存储过程包括的SQL语句以及程序语句,采用不同的执行方式,即:对于SQL语句,数据库服务器120会将该SQL语句发送给数据库协调器140,由数据库协调器140确定SQL语句涉及到的数据库部分,并指派该数据库部分对应的计算节点执行该SQL语句;对于程序语句,由数据库服务器120中的程序语句执行器组件来执行。数据库服务器120在具体实现时,是由运行着数据库管理系统的计算机来呈现,这种计算机可以是一台独立的计算机,或者在云计算中,采用分布式方式由计算资源、存储资源以及网络资源构成的一台虚拟意义的计算机。
数据库协调器140:用来接收数据库服务器120发送的针对SQL语句的执行请求,确定SQL语句执行请求中所包含的数据所处的数据库部分,并将SQL语句执行请求发送给与上述数据库部分对应的计算节点,由该计算节点完成SQL语句的执行。数据库协调器140的实现是多种多样的,可以是一台独立的计算机,或者可以是和数据库服务器140集成在同一个计算机设备中的软件或者软件和硬件的组件。
数据库150包括数据库部分151、数据库部分152、以及数据库部分153以及计算节点161、计算节点162、以及计算节点163。作为举例,图1A仅示出三个数据库部分,与之对应的,每个数据库部分对应一个计算节点。在实际环境中,根据数据库的规模以及对数据库的部署的实际需求,可能会存在不同数目的数据库部分以及不同数目的计算节点,对此,图1A中的示意性的举例并不构成对本发明的实施例在实现过程中的限制。计算节点161、162和163可被配置在不共享任何事物(英文:Share Nothing)的体系结构中。由此,计算节点161、162和163中的每一个都维护分开的存储器(例如:随机存取存储器RAM)以及来自其他节点的分开的存储资源(例如:盘驱动器)。数据库150是跨计算节点161、162和163分布的,这些计算节点分别维护数据库部分151、152和153。数据库协调器120可使用对分布式数据库进行抽象化的硬件或者软件组件,以使得数据库150作为独立数据库呈现给客户端110。因此,客户端可使用与独立数据库兼容的命令和数据库150进行交互。需要说明的是,和数据库部分151-153分别对应的计算节点在具体实现中有不同的实现方式,当数据库中的数据在物理上是分布式存储的(即不同的数据库部分存储在不同的服务器设备中且彼此物理上分布在不同的区域),这些计算节点可以看成是不同服务器设备;当数据库中的数据在物理上是集中式存储的(逻辑上可能存在多个数据库的部分,物理上共用同一个服务器设备),这些计算节点可以看成是同一个服务器设备中的不同的处理器,或者同一个处理器中的不同线程。
作为示意性的举例,图1B示出Java7提供的可并行执行任务的Fork-Join框架。该框架中,一个任务被分解为若干个子任务,每个子任务可并行执行,最终各个子任务的执行结果汇总得到整个任务的执行结果。如图1B所示,Fork指的是将任务分解为若干个子任务并行的执行;Join就是合并这些子任务的执行结果,得到最终任务执行结果。在Fork阶段,分解得到的子任务可能还是很大,所以还需要进一步分割,直到分割出的子任务足够小。在数据库领域,一些任务也可以按照Fork-Join的框架被分解为若干个存储过程,分别执行这些存储过程获得存储过程的执行结果,进而合并得到这些任务的执行结果。需要说明的是,图1B以及针对图1B的文字描述不仅适用于Java7中的Fork-Join框架,也适用于其他遵循分布式计算的框架,对此,上述描述不应该理解为仅针对Fork-Join框架的适用。利用图1B所示的分布式计算的框架,本发明的包含至少两个存储过程的任务被分解为至少两个存储过程,这至少两个存储过程被分配给多个计算节点(既可以理解为多个处理器,也可以理解为处理器的多个线程)去处理,处理结果通过类似Join的方式组合,从而得到该任务的处理结果。
图1A中,实现存储过程创建以及执行的示意性的计算机体系结构100中所包括的数据库150采用分布式的方式存储并且被相应的计算节点访问,这是目前普遍存在一种计算机体系结构。考虑到本方案不仅适用于目前普遍存在这种分布式的数据库,同时也适用于数据库集中式存储和访问的单一服务器形式的计算机体系结构中,对此,本发明的任何实施例均不排除这种适用。
数据库处理架构
着眼于多个存储过程的执行过程,图2所示为本发明实施例所应用的数据库处理架构包括:数据库引擎(Database Engine,DB Engine)200,两种形式的输入,分别是:多个存储过程300,以及超级存储过程(英文全称:Super Stored Procedure,简称:SSP)400。
其中,数据库引擎200是数据库管理系统(英文全称:Database ManagementSystem,简称:DBMS)的组成部分,利用数据库引擎能够在数据库中创建(Create)数据、从数据库中读取(Read)数据、更新(Update)数据库中的数据、以及删除(Delete)数据库中的数据,这就是对数据库中数据常说的CRUD操作。绝大多数数据库管理系统都包括自有的应用程序接口(英文全称:Application Programming Interface,简称:API),通过这些API能够允许用户和数据库引擎交互以便对数据库中的数据进行操作。结合图1A所示的计算机体系架构100,数据库引擎200对应于数据库服务器120以及数据库协调器140所包括的组件。
多个存储过程300作为本发明实施例方案中的一种形式的输入,其中,多个存储过程包括至少两个存储过程。这多个存储过程300的执行请求可以由一个客户端发出,也可以由多个客户端发出。存储过程一般由用户创建,用户通过将一些较为复杂的且可能重复执行的操作创建为存储过程,并进行编译,这样后续在调用该存储过程,只需要指定存储过程的名称以及参数即可调用执行。作为举例,如下是存储过程的创建代码示意性举例。
从上面的代码,可以看出,该存储过程包括两个输入参数(p1,p2)以及一个输出参数(p3),其程序体包含了一个变量初始化(var_a),四个SQL语句调用(一个update语句,三个select语句),以及一个IF-THEN-ELSE的逻辑控制语句。
超级存储过程SSP 400,是本发明实施例方案定义的一种数据结构,即将多个存储过程组合称为一个超级存储过程。见图3,其中,SSP中包含一个列表,即并行存储过程集合:SP1,SP2,...,SPn,其中每个SPi(i=1...n)对应一个存储过程。SSP的生成有两种方式:
(1)一种方式是由用户编写。举例来说,用户可通过利用“并行关键字+存储过程”的方式实现。在创建存储过程时,可添加并行关键字“parallel”,如:create parallelprocedure;或可将被调用的存储过程分配到多个组中,如:
call parallel%ID%%procedure_name%,
可将ID相同的存储过程构成一个可并行的存储过程的集合。
(2)通过超级存储过程合成器(SSP Assembler)对一组能够并行执行的存储过程合成得到。
判断多个存储过程能否并行,主要取决于各个存储过程是否存在对同一数据的读-写冲突,或者对同一数据的写-写冲突。以如下表一作为举例:
存储过程标识 | SQL语句 |
1 | Select name from employee where id=1; |
2 | Update employee set id=2 where id=1; |
3 | Select amount from sales where tid=1002; |
(表一)
上表包括三个存储过程,假设这三条SQL语句分别属于三个不同的存储过程,且每个存储过程仅包含一条SQL语句。其中,存储过程1中包括的SQL语句是读取employee表中id=1的数据,存储过程2中包括的SQL语句是更新了employee表中id=1的数据。存储过程3中包括的SQL语句则是读取了sales表中的数据。从上面的三条SQL语句可以看出,存储过程1和存储过程2中各包括的一条SQL语句存在读-写冲突,如果存储过程1和存储过程2并行执行时,会导致因为执行的顺序不同,得到的结果也不相同,这样会导致结果的不确定性。而存储过程1和存储过程3,以及存储过程2和存储过程3不存在对相同数据的读-写冲突,因此可以并行执行。
需要说明的是,在具体实现中,包括至少两个存储过程的任务在执行时,并非所有的存储过程都是可以并行执行的,例如:两个或两个以上的存储过程存在同一数据的读-写冲突或者写-写冲突,对于这些不能够并行的存储过程,就只能采用串行执行的方式,但是,这并不影响到本发明实施例所带来的有益效果,只要将这些能够并行的存储过程合并在一起处理就能够达到提升多个存储过程执行效率的技术效果。
存储过程引擎(Stored Procedure Engine,SP Engine)210用于对多个存储过程300或者超级存储过程400进行处理。其中,包括:
(A)超级存储过程合成器(SSP Assembler)211,用来对输入的多个存储过程300合并成一个超级存储过程的数据结构(如图3所示)。结合图1A所示的计算机体系结构100,超级存储过程合成器211是数据库服务器120的一个组件。
(B)超级存储过程执行器(SSP Executor)212,用来执行输入的超级存储过程400或者经超级存储过程合成器211合成之后的超级存储过程。具体的,超级存储过程执行器212用来向计算机系统的操作系统请求线程资源,操作系统在接收到该请求之后,为其分配当前可用的线程。在收到分配的线程(至少有2条线程)后,类似于图1B所示的Fork-Join架构,超级存储过程执行器212将超级存储过程所包含的存储过程分解为若干个子任务,每个子任务包含一个或多个存储过程,超级存储过程执行器212将这些若干子任务调度到分配的线程上执行。结合图1A所示的计算机体系结构100,超级存储过程执行器212是数据库服务器120的一个组件。
(C)存储过程执行器(Stored Procedure Executor,SP Executor)213,用来执行输入的存储过程。在软件上,系统中需要创建一个或者多个存储过程执行器实例。超级存储过程执行器利用多个线程并行执行多个存储过程时,一个线程对应一个存储过程执行器实例。当线程1执行第一存储过程的某一SQL语句时,将该SQL语句发送给SQL语句分配器215缓存,然后等待该SQL语句的执行结果。此时,执行该第一存储过程的线程1处于等待状态,该线程所占用的资源(如:CPU)则会分配给其他的线程(如:线程2)来执行其他的存储过程(例如:第二存储过程)。当上述SQL语句执行结果返回时,处于等待状态的线程1重新申请资源(例如:CPU)请求执行,用来执行该第一存储过程中的其他语句(SQL语句或者程序语句)。存储过程执行器213在执行到SQL语句时,将待执行的SQL语句发送给SQL语句分配器215,由SQL语句分配器215来对SQL语句进行调度,发送给SQL执行引擎220执行;在执行到程序语句时,将该程序语句发送给程序语句执行器214执行。结合图1A所示的计算机体系结构100,存储过程执行器213是数据库服务器120的一个组件。
例如:假定有包括1000个存储过程的超级存储过程,SSP Executor 212申请20个线程,这样每个线程平均分配50个存储过程,SSP Executor 212为每个线程创建存储过程执行器213实例,由这些实例负责线程内存储过程的执行。
(D)程序语句执行器(Procedural Statement Executor,PS Executor)214,用来执行存储过程中除SQL语句之外的其他语句,包括但不限于:逻辑控制语句、变量赋值语句、表达式运算语句等等。在程序语句执行器将程序语句执行完后,执行结果会返回给对应的存储过程执行器213。结合图1A所示的计算机体系结构100,程序语句执行器214是数据库服务器120的一个组件。
对于程序语句的执行,不同的编译器语法定义不同,解析也不相同。但处理过程一般可分为:语法分析、语义分析、以及语句执行。
以“a+b”计算为例,需要经过三个步骤:
①语法分析:判断是否符合语法定义,例如:“a+”就不是完整的表达式。
②语义分析:对变量以及类型进行检查,例如:变量“a”“b”是否被定义,“a”和“b”是否是相同类型的数据。
③语句执行:通过语法分析以及语义分析,前面的表达式计算已经变成了执行器可以识别的内部表达形式,执行器知道“a+b”是一个加法操作,第一个算子是a,第二个算子是b,获取变量a、b的值,调用加法运算,然后将结果返回(例如:赋值给一个中间变量,或者直接返回等)。
(E)SQL语句分配器(SQL Statement Dispatcher)215,用来接收各个存储过程执行器213发送的SQL语句,并放入SQL池(SQL Pool)2151中。结合图1A所示的计算机体系结构100,SQL语句分配器215是数据库协调器140的一个组件。
具体的,根据不同的SQL语句的访问特性,SQL语句分配器215会创建不同的SQL语句缓存队列;针对接收到的SQL语句的访问特性,SQL语句分配器215将该接收到的SQL语句缓存到与之访问特性相同的SQL语句缓存队列。
进一步的,SQL语句访问特性包括:待访问的表。即:多条SQL语句,它们访问相同的表。举例说明:在SQL语句的FROM子句后的表名,多条SQL语句是一致的。由于访问相同的一个表,这样多条SQL语句在利用SQL执行引擎执行时,避免了访问多个表带来的访问开销,从而加速SQL语句的执行效率。
进一步的,在访问相同表的条件下,SQL语句访问特性还包括:SQL语句中的公共表达式。公共表达式为SQL语句中的一些相同表达式的计算。例如:如下表二中的两个SQL语句访问相同的表Employee,且有相同的表达式:Salary>5000。
(表二)
从表二可以看出,在执行第2条SQL语句时,就可以利用第1条SQL语句的执行结果,即执行第二条SQL语句时,只需要在第一条SQL语句执行结果(包括的多条记录)中筛选age>20的记录就可以得到,从而提高了第2条SQL语句的执行效率。
举例来说:如果有200条SQL语句,其中有100条访问了EMP表,另外100条访问DEPT表,则可以根据访问表的不同分为两个缓存队列,每个缓存队列中的SQL语句访问相同的表。又例如:当在SQL池中所包含的SQL语句,对表的访问是不均衡的,例如:在1000条SQL语句中,有900条访问了EMP表,有100条访问了DEPT表。由于访问EMP表的SQL语句数量太多,这样会导致在执行900个访问EMP表的SQL语句存在执行延时过长的问题,因此,可以对900条访问EMP表的SQL语句根据访问特性进行细分,比如:900条访问EMP表的SQL语句中有300条SQL语句是包含对Salary>5000数据进行访问,有另外300条SQL语句是包含对Age>20数据进行访问,还有300条SQL语句是包含对ID number>450的数据进行访问,这样可以分别针对上面Salary>5000、Age>20,以及ID number>450访问特性进行分组。
本领域技术人员可以理解,待访问的表以及SQL语句中的公共表达式只是SQL语句访问特性中的两个举例,还有其他的访问特性,在此不再赘述。包含了其他访问特性的实现方式,均属于本发明的保护范围。
具体实现中,预设触发条件包括:
(1)时间触发条件:SQL语句缓存队列存续时间达到设定时间阈值。
具体的,当接收到SQL语句时,SQL语句分配器215按照相同访问特性分组,在接收到第一条具有某一访问特性的SQL语句时,创建这个分组,并创建定时器,后面每次接收到具有该访问特性的SQL语句时,就会将SQL语句缓存在该分组中。当定时器达到设定时刻后,就会触发将该分组缓存的SQL语句发送给SQL语句执行引擎执行的操作。
(2)数目触发条件:SQL语句缓存队列中SQL语句的个数达到设定数量阈值。
具体的,SQL语句分配器215按照相同访问特性分组,在接收到第一条具有某一访问特性的SQL语句时,创建这个分组,并创建计数器用于对缓存在该分组中的SQL语句计数,后面每次接收到具有该访问特性的SQL语句时,就会将SQL语句缓存在该分组中,并增加计数器的计数值。当该计数器的数值(分组中的SQL个数)达到设定的个数阈值时,就会触发将该分组缓存的SQL语句发送给SQL语句执行引擎执行的操作。
需要注意的是,上述的时间触发条件以及数目触发条件可以二选一,作为单独的触发条件,譬如:仅采用数目触发条件,这样的话,除非数目达到数目阈值,否则就不会触发缓存的SQL语句的执行,这种方式保证了SQL语句批量执行的效率但是存在一些场合下,导致等待时间比较长,事实上抵消了批量执行SQL语句带来的优势。仅采用时间触发条件,满足了时间阈值,就触发缓存的SQL语句的执行,这种方式保证了SQL语句在SQL池缓存的时间不至于太长,但是可能也导致SQL语句缓存数量比较小而带来的批量SQL语句执行的效果体现不出来的问题。因此,在具体实现中,两类触发条件可以结合来实现,以便克服采用单一触发条件带来的不利因素。举例来说:某一场景下,具有某一访问特性的SQL语句的个数还没有达到数目触发条件,但是由于缓存的时间已经比较长了,为了保证SQL语句的处理效率,可以设定一个时间触发条件,触发将缓存的SQL语句发送到SQL执行引擎220去执行。这种实现过程的一个特例是,随着时间的推移,某一访问特性分组中的SQL语句始终只有一条,在这种情况下,是需要设定一个时间触发条件以便达到时间阈值后,就将缓存的SQL语句发送到SQL执行引擎220执行。
当SQL语句缓存的分组未达到上面SQL语句发送执行的触发条件时,则SQL语句分配器215继续进行SQL语句的按照访问特性去分组缓存。
作为示例,图2中的SQL缓存池2151包括两个SQL语句队列,其中,第一个队列中包括SQL1和SQL2共两条SQL语句,第二个队列中包括SQL3-SQL6共四条SQL语句。
进一步可选的,为了能够将存储过程中待执行的SQL语句的执行结果返回给执行该SQL语句所属存储过程的线程,在存储过程执行器213将待执行的SQL语句发送给SQL语句分配器以便根据相同访问特性缓存时,SQL语句分配器215会记录存储过程中待执行的SQL语句和执行该存储过程线程的对应关系。这样,当接收到所述SQL语句执行引擎执行所述任务包含的SQL语句返回的执行结果后,根据所述待执行SQL语句和执行线程的对应关系,SQL语句分配器215将所述执行结果返回给所述SQL语句对应的执行线程。
(F)SQL执行引擎(SQL Execution Engine)220,用于执行SQL语句。结合图1A所示的计算机体系结构100,SQL执行引擎220是数据库150内部的由软件和硬件所构成的组件,其中SQL执行引擎220包括计算节点中的处理器用来接收SQL语句,并对SQL语句在处理器上进行如下执行过程的处理。其中执行过程包括:
①语法检查(英文:Syntax Check),这里是对SQL语句的语法进行检查,看其是否合乎语法规则。如果SQL执行引擎确认该条SQL语句不符合语法规则时,就会把这个错误信息反馈给客户端。
②语义检查(英文:Semantic Check),用来检查SQL语句中的访问对象(如:表、索引、视图等)是否存在以及发出该SQL语句的用户是否具备相应的权限。
③语句解析(Parse),用来对SQL语句进行解析,生成解析树(Parse Tree)以及执行计划(Execution Plan)。
④执行(Execution),用来执行SQL语句,返回执行结果。
采用图2所示的数据库处理架构,为多个存储过程分配多个线程进行处理,在多个存储过程执行的过程中,能够将执行过程中的SQL语句根据相同访问特性分组缓存,在预设的触发条件达到后,将具有相同访问特性的SQL语句批量发送给SQL执行引擎,从而在存储过程数量比较多的条件下,能够有效地提高存储过程的执行效率。
实施例
结合图2的数据库处理架构,图4示出了本发明的方法实施例的流程示意图。
步骤401、超级存储过程合成器211接收客户端发送的多个存储过程的执行请求。
其中,多个存储过程的执行请求包括多个存储过程的名称以及参数。
可选的,在超级存储过程合成器211接收到至少两个存储过程后,通过超级存储过程合成器211对之进行筛选,即筛选出能够并行的存储过程,并将这些存储过程合并成一个超级存储过程,类似于图3所示的结构。这个超级存储过程至少包括一些可以并行的存储过程,其中,可并行的存储过程可以参考图2所示的数据库处理架构中的文字描述,在此不再赘述。
具体的,至少两个存储过程的执行请求可以由一个客户端发出,或者由多个客户端发出,譬如:客户端1发出针对存储过程1的执行请求,客户端2发出针对存储过程2、以及存储过程3的执行请求。
步骤402、超级存储过程合成器211将多个存储过程合并为超级存储过程。
其中,超级存储过程合成器211将多个存储过程合并为一个超级存储过程并非必选项,这个合成可以由用户来实现。即将多个存储过程合并为如图3所示的数据结构,见前述“数据库处理架构”部分介绍,在此不再赘述。
步骤403、超级存储过程合成器211向超级存储过程执行器212发送超级存储过程执行请求。
步骤404、超级存储过程执行器212申请至少两个线程。
具体的实现可参考“数据库处理架构”部分中针对超级存储过程执行器212的描述,此处不再赘述。
步骤405、超级存储过程执行器212将超级存储过程所包括的多个存储过程分配给所申请的至少两个线程。
具体的实现可参考“数据库处理架构”部分针对超级存储过程执行器212的描述,此处不再赘述。
步骤406、存储过程执行器213执行一个存储过程。
需要说明的是,步骤406-步骤417是以一个存储过程的执行为例介绍,对于多个存储过程,每个存储过程执行器按照相似的流程进行处理,在此不再赘述。
步骤407、在执行程序语句时,存储过程执行器213向程序语句执行器214发出程序语句执行请求,转到步骤409。
具体实现可参考“数据库处理架构”部分针对程序语句执行器214的描述,此处不再赘述。
步骤408、在执行SQL语句时,存储过程执行器213向SQL语句分配器发送SQL语句执行请求,转到步骤410。
具体实现可参考“数据库处理架构”部分针对SQL语句分配器215的描述,此处不再赘述。
步骤409、程序语句执行器214对程序语句进行执行,转到步骤415。
具体实现可参考“数据库处理架构”部分针对程序语句执行器214的描述,此处不再赘述。
步骤410、SQL语句分配器215接收SQL语句执行请求,并提取待执行的SQL语句进行缓存。
具体实现可参考“数据库处理架构”部分针对SQL语句分配器215的描述,此处不再赘述。
进一步的,在步骤410执行的过程中,在接收待执行的SQL语句,并将该SQL语句按照相同的访问特性分组缓存时,记录该SQL语句和执行线程的对应关系,所述执行线程为执行该SQL语句所属存储过程的线程。通过记录SQL语句和执行线程的对应关系,能够在SQL语句执行结束后,将执行结果返回给执行SQL语句所属存储过程的线程,从而能够唤醒该线程继续执行该存储过程的其他语句,当该存储过程执行完成后,执行的结果会返给客户端或者其他的存储过程。
步骤411、SQL语句分配器215判断是否满足SQL语句执行触发条件;如果判断结果为是,转到步骤412;如果判断结果为否,转到步骤413。
具体实现可参考“数据库处理架构”部分针对SQL语句分配器215的描述,此处不再赘述。
步骤412、触发缓存的SQL语句的执行,转到步骤414。
具体实现可参考“数据库处理架构”部分针对SQL语句分配器215的描述,此处不再赘述。
步骤413、继续进行SQL语句的缓存。
具体实现可参考“数据库处理架构”部分针对SQL语句分配器215的描述,此处不再赘述。
步骤414、SQL执行引擎220对发送的SQL语句进行执行,转到步骤416。
具体实现可参考“数据库处理架构”部分针对SQL执行引擎220的描述,此处不再赘述。
步骤415、程序语句执行器214将程序语句执行结果返回给存储过程执行器213。
具体实现可参考“数据库处理架构”部分针对程序语句执行器214的描述,此处不再赘述。
步骤416、SQL执行引擎220将SQL语句执行结果416发送给存储过程执行器213。
具体实现可参考“数据库处理架构”部分针对SQL语句分配器215的描述,此处不再赘述。
进一步的,当接收到SQL执行引擎220执行待执行SQL语句后返回的执行结果后,根据该SQL语句和执行线程的对应关系,将SQL语句的执行结果返回给该SQL语句对应的执行线程。
步骤417、存储过程执行器213将该存储过程执行完成。
具体实现中,存储过程执行器213按照顺序执行的方式执行完整个存储过程的语句(包括SQL语句以及程序语句)。
步骤418、存储过程执行器213将存储过程执行的结果发送给超级存储过程执行器212。
具体的,存储过程执行器213在执行完一个存储过程后,会将结果返回给超级存储过程执行器212。而后,该存储过程执行器213所占用的线程可以分配用来执行其他的存储过程。
步骤419、超级存储过程执行器212将包括多个存储过程的超级存储过程执行完成。
具体的,在超级存储过程所包括的存储过程均被执行完之后,会收集所有存储过程的执行结果。
需要说明的是,在实际场景下,客户端发出的包含至少两个存储过程的任务中,有些存储过程(例如:存储过程1)和其他的存储过程(例如:存储过程2、3、以及4)存在对同一数据的读-写冲突或者写-写冲突,因此无法并行执行。这种情况下,在存储过程2、3、以及4按照本发明实施例所提供的方案执行完毕后,可以单独分配线程来执行存储过程1。这种单独执行这种无法并行的存储过程的实现方式并不影响本发明实施例所达到的有益效果。
步骤420、超级存储过程执行器212向客户端返回执行结果。
具体的,超级存储过程执行器212将所有存储过程的执行结果收集后,返回给发出包含多个存储过程的客户端。
采用上述的方式,通过申请多个线程来执行包括至少两个存储过程的任务能够加快存储过程的处理速度,针对相同访问特性的SQL语句采用分组方式缓存,在满足预设触发条件时,调用SQL语句执行引擎对满足预设触发条件的缓存的SQL语句分组进行批量执行,从而能够提升多个存储过程的执行效率。
图5示出了一种用于存储过程的执行设备的结构图。具体实现中,该执行设备可以集成在数据库管理系统中,用来优化包括至少两个存储过程的任务的执行效率。该执行设备500包括:
接收单元510,用于接收执行请求,所述执行请求用于请求执行包含至少两个存储过程的任务。
上述执行请求可以来源于客户端或者来源于其他的存储过程。该接收单元510可以是物理含义上的端口(Port),也可以是逻辑含义上的用来接收信号的接口(Interface),或者两者含义上的结合。结合本发明实施例所应用的数据库处理架构图,接收单元510对应的数据库引擎200和客户端的接口或者同其他存储过程关联的API接口。
调度单元520,用于申请至少两个线程,将所述任务中每个存储过程分配给所述至少两个线程的一个线程处理。
具体实现上,调度单元520对应的数据库管理系统中的资源请求组件,它负责对要执行的包括至少两个存储过程的任务申请处理资源。对应于图2所示的数据库处理架构中的超级存储过程执行器212。具体操作中,由该调度单元520向运行数据库管理系统的服务器中的操作系统请求处理资源,操作系统在接收到该请求后根据可用处理资源分配相应的处理资源。其中,处理资源具体可以为线程(thread),进程(Process)或者其他颗粒大小可供调度的处理资源。每个存储过程分配一个线程来执行,在具体实现中,存储过程的执行程序在执行时,会创建多个存储过程执行实例,每个执行实例对应一个线程,而一个线程可能被分配用来执行多个存储过程。从这个角度来看,多个线程的处理是并行的执行过程,而对于一个线程,当执行存储过程1时需要等待某一SQL语句的执行结果,此时该线程就陷入等待状态,可以利用该线程执行其他的存储过程,这样来看,一个线程来执行多个存储过程就成为并发的执行过程。
缓存单元530,用于接收所述至少两个线程在执行所述任务包括的存储过程时发送的SQL语句,并将所述接收到的SQL语句按照相同的访问特性分组缓存。
具体实现上,缓存单元是一块操作系统分配的存储空间。在本发明的实施例中,缓存单元530对应于图2所示的数据库处理架构中的SQL池2151以及实现SQL语句缓存的控制逻辑。具体来说,这个缓存单元530可以利用处理器中的缓存单元来实现,即处理器在执行存储过程中,当判断是SQL语句,在缓存控制逻辑的控制下,将待执行的SQL语句根据访问特性分组缓存。此外,这个缓存单元530也可以利用数据库管理系统所在德服务器中的内存以及内存控制器来实现,当处理器执行存储过程中,当判断是SQL语句,在内存控制器的控制下,将待执行的SQL语句根据访问特性分组缓存在预先分配的内存空间中。
SQL调用执行单元540,用于在满足预设触发条件时,调用SQL语句执行引擎执行所述SQL语句缓存分组中的SQL语句。
具体实现中,SQL调用执行单元540对应于图2中的SQL语句分配器215,即实现SQL语句的分组是否发送到SQL执行引擎的触发条件的判断。具体执行过程,可参见图2以及对应的数据库处理架构中有关SQL语句分配器的描述。从实现上来看,这个SQL调用执行单元540可以通过逻辑电路来实现,也可以通过处理器执行判断逻辑的代码实现。
进一步的,所述缓存单元530包括:
队列创建模块531,用于根据不同的SQL语句的访问特性,创建不同的SQL语句缓存队列。
其中,队列创建模块531,对应于图2中的数据库处理架构中的SQL语句分配器的SQL池控制组件的功能。可以通过处理器运行队列创建功能的代码实现,也可以通过逻辑电路来实现。在具体实现中,每当接收到某一访问特性的SQL语句,该队列创建模块531可以创建一个存储区域,并增加逻辑标签标识这块区域,以便存储具有相同访问特性的SQL语句。
存储操作模块532,用于确定所述接收到的SQL语句的访问特性,将所述接收到的SQL语句缓存到与之访问特性相同的SQL语句缓存队列。
其中,存储操作模块532对应于图2所示的数据库处理架构中的SQL语句分配器中实现存储操作的功能组件。根据缓存单元530不同的实现,存储操作模块532可以有不同的实现形式,当缓存单元530是通过处理器中的缓存单元来实现时,该存储操作模块532可实现为缓存控制逻辑电路;当缓存单元530是通过内存来实现时,该存储操作模块532可实现为内存控制逻辑电路。
进一步的,所述SQL语句访问特性包括:待访问的表。
具体的,SQL语句的访问特性可由数据库管理系统中实现SQL语句分析功能的组件完成。例如:SQL语句中的FROM子句中的内容,可以识别出该SQL语句访问的表。
进一步的,所述SQL语句访问特性还包括:SQL语句中的公共表达式。
具体的,根据上述所提的SQL语句分析功能的组件完成,例如:SQL语句中的Where之后的子句所指示的内容,可以确定该SQL语句中的公共表达式,作为举例,如下SQL语句中:Select name from employee where salary>5000,where之后salary>5000就是该SQL语句中的公共表达式。
进一步的,所述预设触发条件包括:所述SQL语句缓存队列存续时间达到设定时间阈值;或者所述SQL语句缓存队列中SQL语句的个数达到设定数量阈值。
具体的,上述的预设触发条件可以预先写入存储操作模块532中。对应图2的数据库处理架构,预设触发条件可以写入SQL语句分配器的缓存单元中。需要说明的是,配套这两种预设触发条件,在SQL语句分配器需要设置计时器和/或计数器。计时器和/或计数器可以采用硬件逻辑电路实现,或者通过软件代码实现。
进一步的,所述执行设备500还包括:程序调用执行单元560,用于接收所述至少两个线程在执行所述至少两个存储过程时发送的程序语句,将所述程序语句发送到程序语句执行器570去执行。
其中,程序调用执行单元560是负责对程序语句进行判断的逻辑组件。对应图2的数据库处理架构中存储过程执行器213中对程序语句的判断模块。具体实现时,可以包括语法分析组件、语义分析组件等。
程序语句执行器570是负责对程序语句进行执行的逻辑组件。具体可以由处理器运行程序语句执行代码的方式实现。
进一步的,所述缓存单元530还包括:映射关系记录模块533,用于在接收所述至少两个线程在处理时发送的SQL语句,并将所述接收到的SQL语句缓存时,记录所述SQL语句和执行线程的对应关系,所述执行线程为执行所述SQL语句所属存储过程的线程。
其中,映射关系记录模块533对应于图2所示的数据库处理架构中的SQL语句分配器215的组件。SQL语句和执行线程的对应关系,可以记录在同SQL池一样预先分配的处理器的缓存或者内存中。
进一步的,所述SQL调用执行单元540还用于:当所述待执行SQL语句被所述SQL语句执行引擎执行获得执行结果后,根据所述待执行SQL语句和执行线程的对应关系,将所述执行结果返回给所述SQL语句对应的执行线程。
具体的,SQL调用执行单元540对应于图2数据库处理架构中的SQL语句分配器215中负责SQL结果返回的组件。其中,SQL调用执行单元540利用SQL语句调用映射关系记录模块533查询得到执行线程的标识,将SQL执行结果返回给对应的执行线程。
图6是本发明提供的一种数据库管理系统600,包括:处理器610、存储器620、通信接口630和总线640;所述处理器610、所述存储器620和所述通信接口630通过所述总线640通信;所述存储器620用于存储执行指令,所述通信接口630用于与客户端700通信;当所述客户端700发送执行请求,所述执行请求用于请求执行至少两个存储过程时,所述处理器610执行所述存储器620存储的所述执行指令,以使所述数据库管理系统600方法实施例中任一所述的用于存储过程的执行方法。
本发明的实施例还提供了一种计算机程序产品,其中,所述计算机程序产品包括计算机程序代码,当所述计算机程序代码被一个计算机执行的时候,所述计算机程序代码可以使得所述计算机执行方法实施例中任意一项的步骤。
本发明的实施例还提供了一种计算机可读存储介质,其中,所述计算机存储计算机程序代码,当所述计算机程序代码被一个计算机执行的时候,所述计算机程序代码可以使得所述计算机执行方法实施例中任意一项的步骤。
结合本发明公开内容所描述的方法或者算法的步骤可以硬件的方式来实现,也可以是由处理器执行软件指令的方式来实现。软件指令可以由相应的软件模块组成,软件模块可以被存放于RAM(Random Access Memory,随机存取存储器)存储器、闪存、ROM(Read-Only Memory,只读存储器)存储器、EPROM(Erasable Programmable Read-Only Memory,可擦写可编程只读存储器)存储器、EEPROM(Electrically-Erasable Programmable Read-Only Memory,电可擦可编程只读存储器)存储器、寄存器、硬盘、移动硬盘、CD-ROM或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于ASIC中。另外,该ASIC可以位于用户设备中。当然,处理器和存储介质也可以作为分立组件存在于用户设备中。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。
Claims (13)
1.一种用于存储过程的执行方法,应用于数据库管理系统,其特征在于,包括:
接收执行请求,所述执行请求用于请求执行包含至少两个存储过程的任务;
申请至少两个线程,将所述任务中每个存储过程分配给所述至少两个线程中的一个线程执行;
接收所述至少两个线程在执行所述任务包含的存储过程时发送的SQL语句,并将所述接收到的SQL语句按照相同的访问特性分组缓存;其中,所述接收所述至少两个线程在执行所述任务包含的存储过程时发送的SQL语句,并将所述接收到的SQL语句按照相同的访问特性分组缓存,包括:
根据不同的SQL语句的访问特性,创建不同的SQL语句缓存队列,其中所述访问特性包括SQL语句访问相同的表和/或SQL语句具有公共表达式;
确定所述接收到的SQL语句的访问特性,将所述接收到的SQL语句缓存到与之访问特性相同的SQL语句缓存队列;
对于满足预设触发条件的SQL语句缓存分组,调用SQL语句执行引擎执行所述SQL语句缓存分组中的SQL语句。
2.如权利要求1所述的执行方法,其特征在于,所述预设触发条件包括:
所述SQL语句缓存队列存续时间达到设定时间阈值;和/或
所述SQL语句缓存队列中SQL语句的个数达到设定数量阈值。
3.如权利要求1所述的执行方法,其特征在于,所述方法还包括:
接收所述至少两个线程在执行所述任务包含的存储过程时发送的程序语句,调用程序语句执行器执行所述程序语句。
4.如权利要求1所述的执行方法,其特征在于,当接收所述至少两个线程在执行所述任务包含的存储过程时发送的SQL语句,并将所述接收到的SQL语句按照相同的访问特性分组缓存时,记录所述SQL语句和执行线程的对应关系,所述执行线程为执行所述SQL语句所属存储过程的线程。
5.如权利要求4所述的执行方法,其特征在于,当接收到所述SQL语句执行引擎执行所述任务包含的SQL语句返回的执行结果后,根据待执行SQL语句和执行线程的对应关系,将所述执行结果返回给所述SQL语句对应的执行线程。
6.一种存储过程的执行设备,其特征在于,包括:
接收单元,用于接收执行请求,所述执行请求用于请求执行包含至少两个存储过程的任务;
调度单元,用于申请至少两个线程,将所述任务中每个存储过程分配给所述至少两个线程的一个线程处理;
缓存单元,用于接收所述至少两个线程在执行所述任务包括的存储过程时发送的SQL语句,并将所述接收到的SQL语句按照相同的访问特性分组缓存;其中,所述缓存单元包括:
队列创建模块,用于根据不同的SQL语句的访问特性,创建不同的SQL语句缓存队列,其中所述访问特性包括SQL语句访问相同的表和/或SQL语句具有公共表达式;
存储操作模块,用于确定所述接收到的SQL语句的访问特性,将所述接收到的SQL 语句缓存到与之访问特性相同的SQL语句缓存队列;
SQL调用执行单元,用于对于满足预设触发条件的SQL语句缓存分组,调用SQL语句执行引擎执行所述SQL语句缓存分组中的SQL语句。
7.如权利要求6所述的执行设备,其特征在于,所述预设触发条件包括:
所述SQL语句缓存队列存续时间达到设定时间阈值;和/或
所述SQL语句缓存队列中SQL语句的个数达到设定数量阈值。
8.如权利要求6所述的执行设备,其特征在于,所述执行设备还包括:
程序调用执行单元,用于接收所述至少两个线程在执行所述任务包含的存储过程时发送的程序语句,调用程序语句执行器对所述程序语句执行。
9.如权利要求6所述的执行设备,其特征在于,所述缓存单元还包括:
映射关系记录模块,用于在接收所述至少两个线程在执行所述任务包含的存储过程时发送的SQL语句,并将所述接收到的SQL语句按照相同的访问特性分组缓存时,记录所述SQL语句和执行线程的对应关系,所述执行线程为执行所述SQL语句所属存储过程的线程。
10.如权利要求9所述的执行设备,其特征在于,所述SQL调用执行单元还用于:当接收到所述SQL语句执行引擎执行所述任务包含的SQL语句返回的执行结果后,根据待执行SQL语句和执行线程的对应关系,将所述执行结果返回给所述SQL语句对应的执行线程。
11.一种数据库管理系统,其特征在于,包括:处理器、存储器、通信接口和总线;所述处理器、所述存储器和所述通信接口通过所述总线通信;所述存储器用于存储执行指令,所述通信接口用于与客户端通信;当所述客户端发送执行请求,所述执行请求用于请求执行包含至少两个存储过程的任务时,所述处理器执行所述存储器存储的所述执行指令,以使所述数据库管理系统执行如权利要求1-5中任一所述的执行方法。
12.一种计算机程序产品,其特征在于,所述计算机程序产品包括计算机程序代码,当所述计算机程序代码被一个计算机执行的时候,所述计算机程序代码可以使得所述计算机执行权利要求1至5中任意一项的步骤。
13.一种计算机可读存储介质,其特征在于,所述计算机存储计算机程序代码,当所述计算机程序代码被一个计算机执行的时候,所述计算机程序代码可以使得所述计算机执行权利要求1至5中任意一项的步骤。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2016/113845 WO2018120171A1 (zh) | 2016-12-30 | 2016-12-30 | 一种用于存储过程的执行方法、设备以及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110121704A CN110121704A (zh) | 2019-08-13 |
CN110121704B true CN110121704B (zh) | 2021-09-21 |
Family
ID=62707679
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680091865.0A Active CN110121704B (zh) | 2016-12-30 | 2016-12-30 | 一种用于存储过程的执行方法、设备以及系统 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11182353B2 (zh) |
CN (1) | CN110121704B (zh) |
WO (1) | WO2018120171A1 (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112711602B (zh) * | 2019-10-25 | 2023-04-28 | 金篆信科有限责任公司 | 一种存储过程的运行方法、装置,数据库系统及存储介质 |
CN110968595A (zh) * | 2019-11-27 | 2020-04-07 | 广东科徕尼智能科技有限公司 | 一种单线程sql语句执行方法、设备及存储介质 |
CN111259205B (zh) * | 2020-01-15 | 2023-10-20 | 北京百度网讯科技有限公司 | 一种图数据库遍历方法、装置、设备及存储介质 |
CN111506606A (zh) * | 2020-04-14 | 2020-08-07 | 深圳市金蝶天燕云计算股份有限公司 | 一种报表查询方法及相关设备 |
US11651005B2 (en) * | 2020-05-04 | 2023-05-16 | EMC IP Holding Company LLC | Intelligent datastore determination for microservice |
US11327963B2 (en) * | 2020-09-29 | 2022-05-10 | Atlassian Pty Ltd. | Data retrieval systems and methods |
CN113312388A (zh) * | 2021-05-28 | 2021-08-27 | 中国船舶重工集团公司第七0七研究所 | 一种多线程且安全的数据库存储框架的构建方法 |
CN114003181B (zh) * | 2022-01-04 | 2022-05-20 | 苏州浪潮智能科技有限公司 | 数据写镜像系统、方法、装置、电子设备及存储介质 |
CN114817311B (zh) * | 2022-04-14 | 2022-11-22 | 上海掌数科技有限公司 | 应用于GaussDB数据库存储过程的并行计算方法 |
CN114996292B (zh) * | 2022-05-05 | 2023-07-25 | 北京联华信科技有限公司 | 执行计划自动变更方法、装置、设备及可读存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1330321A (zh) * | 2000-06-20 | 2002-01-09 | 国际商业机器公司 | 用于协调执行的并行软件的高性能无阻塞并行存储管理器 |
CN101093454A (zh) * | 2007-08-14 | 2007-12-26 | 金蝶软件(中国)有限公司 | 一种在分布式系统中执行sql脚本文件的方法和装置 |
CN104142941A (zh) * | 2013-05-08 | 2014-11-12 | 北京航天长峰科技工业集团有限公司 | 一种海量定位数据存储方法 |
CN105528371A (zh) * | 2014-09-30 | 2016-04-27 | 北京金山云网络技术有限公司 | 一种执行写任务的方法、装置及系统 |
Family Cites Families (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6081801A (en) * | 1997-06-30 | 2000-06-27 | International Business Machines Corporation | Shared nothing parallel execution of procedural constructs in SQL |
US6073129A (en) * | 1997-12-29 | 2000-06-06 | Bull Hn Information Systems Inc. | Method and apparatus for improving the performance of a database management system through a central cache mechanism |
US6507834B1 (en) | 1999-12-22 | 2003-01-14 | Ncr Corporation | Method and apparatus for parallel execution of SQL from stored procedures |
US7155426B2 (en) * | 2001-09-20 | 2006-12-26 | International Business Machines Corporation | SQL debugging using stored procedures |
JP4288978B2 (ja) * | 2003-03-27 | 2009-07-01 | 株式会社日立製作所 | データ先読み方法 |
WO2006128062A2 (en) * | 2005-05-25 | 2006-11-30 | Terracotta, Inc. | Database caching of queries and stored procedures using database provided facilities for dependency analysis and detected database updates for invalidation |
CN101980207B (zh) * | 2010-11-09 | 2012-05-30 | 中国电信股份有限公司 | 一种数据库访问的实现方法和系统 |
CN102508716B (zh) * | 2011-09-29 | 2015-04-15 | 用友软件股份有限公司 | 任务控制装置和任务控制方法 |
US20130091266A1 (en) * | 2011-10-05 | 2013-04-11 | Ajit Bhave | System for organizing and fast searching of massive amounts of data |
CN102945256B (zh) * | 2012-10-18 | 2016-02-03 | 福建省海峡信息技术有限公司 | 海量sql语句合并归类的方法及装置 |
US9128990B2 (en) | 2013-03-15 | 2015-09-08 | Microsoft Technology Licensing, Llc | Executing stored procedures at parallel databases |
CN103617273B (zh) * | 2013-12-05 | 2016-09-14 | 用友网络科技股份有限公司 | Sql脚本对象化的方法及系统 |
CN104899093B (zh) * | 2014-03-04 | 2018-06-05 | 华为技术有限公司 | 数据处理方法、装置和系统 |
US9552390B2 (en) | 2014-04-29 | 2017-01-24 | Futurewei Technologies, Inc. | System and method for out of order multiple query execution within stored procedure |
CN104391895A (zh) * | 2014-11-12 | 2015-03-04 | 珠海世纪鼎利通信科技股份有限公司 | 一种基于云计算的sql语句处理系统 |
CN106156174A (zh) * | 2015-04-16 | 2016-11-23 | 中国移动通信集团山西有限公司 | 一种数据库事务处理的系统和方法 |
CN105279276B (zh) * | 2015-11-11 | 2018-09-18 | 浪潮(北京)电子信息产业有限公司 | 一种数据库索引优化系统 |
CN105893083B (zh) * | 2016-03-29 | 2019-06-11 | 华中科技大学 | 云环境下基于容器的移动代码卸载支撑系统及其卸载方法 |
US10896178B2 (en) * | 2016-03-30 | 2021-01-19 | Microsoft Technology Licensing, Llc | High performance query processing and data analytics |
-
2016
- 2016-12-30 CN CN201680091865.0A patent/CN110121704B/zh active Active
- 2016-12-30 WO PCT/CN2016/113845 patent/WO2018120171A1/zh active Application Filing
-
2019
- 2019-07-01 US US16/458,684 patent/US11182353B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1330321A (zh) * | 2000-06-20 | 2002-01-09 | 国际商业机器公司 | 用于协调执行的并行软件的高性能无阻塞并行存储管理器 |
CN101093454A (zh) * | 2007-08-14 | 2007-12-26 | 金蝶软件(中国)有限公司 | 一种在分布式系统中执行sql脚本文件的方法和装置 |
CN104142941A (zh) * | 2013-05-08 | 2014-11-12 | 北京航天长峰科技工业集团有限公司 | 一种海量定位数据存储方法 |
CN105528371A (zh) * | 2014-09-30 | 2016-04-27 | 北京金山云网络技术有限公司 | 一种执行写任务的方法、装置及系统 |
Also Published As
Publication number | Publication date |
---|---|
US11182353B2 (en) | 2021-11-23 |
CN110121704A (zh) | 2019-08-13 |
US20190324952A1 (en) | 2019-10-24 |
WO2018120171A1 (zh) | 2018-07-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110121704B (zh) | 一种用于存储过程的执行方法、设备以及系统 | |
US10310908B2 (en) | Dynamic usage balance of central processing units and accelerators | |
Gharaibeh et al. | Efficient large-scale graph processing on hybrid CPU and GPU systems | |
US9401835B2 (en) | Data integration on retargetable engines in a networked environment | |
US20160196163A1 (en) | Using databases for both transactions and analysis | |
US10970311B2 (en) | Scalable snapshot isolation on non-transactional NoSQL | |
US10394775B2 (en) | Order constraint for transaction processing with snapshot isolation on non-transactional NoSQL servers | |
US10191663B1 (en) | Using data store accelerator intermediary nodes and write control settings to identify write propagation nodes | |
Li et al. | Mizan-rma: Accelerating mizan graph processing framework with mpi rma | |
CN114443680A (zh) | 数据库管理系统、相关装置、方法和介质 | |
Lin et al. | A configurable and executable model of Spark Streaming on Apache YARN | |
US11157406B2 (en) | Methods for providing data values using asynchronous operations and querying a plurality of servers | |
US20170322973A1 (en) | System and Method to Optimize Queries on a View | |
US20210149746A1 (en) | Method, System, Computer Readable Medium, and Device for Scheduling Computational Operation Based on Graph Data | |
Tanase et al. | System G distributed graph database | |
US11907176B2 (en) | Container-based virtualization for testing database system | |
WO2016186531A1 (en) | System and method for synchronizing distributed computing runtimes | |
CN112540858B (zh) | 任务处理方法、服务器、客户端及系统 | |
CN113177089A (zh) | 一种分布式数据存储引擎调度方法 | |
CN112948078A (zh) | 基于服务调用的收益分配任务处理方法及装置 | |
CN115269207B (zh) | 一种用于vCPE网元分配资源的方法和系统 | |
US11681672B2 (en) | Virtual database resource usage | |
US11847054B2 (en) | Providing data values using asynchronous operations and based on timing of occurrence of requests for the data values | |
CN113268355A (zh) | 分布式集群的数据库连接方法及装置 | |
CN115544055A (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 |