一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于分库分表中间件的预编译方法与系统与流程

2022-03-26 15:46:02 来源:中国专利 TAG:


1.本发明实施例涉及数据处理技术领域,尤其涉及一种基于分库分表中间件的预编译方法与系统。


背景技术:

2.随着业务和流量的增长,对于分库分表中间件的要求越来越高。对于分库分表中间来说,支持oracle预编译sql语句功能可以有效的提高访问效率和sql执行速度。分库分表中间件通过实现sql的预编译功能,即可以大幅度减少与数据库的交互次数,还可以减少与数据库交互数据包大小。目前,发明人发现,现有的分库分表中间件主要存在以下问题:现有的分库分表中间件进行预编译时兼容性较差;并且预编译不能完美支持不同分库的路由规则。


技术实现要素:

3.有鉴于此,本发明实施例的目的是提供一种基于分库分表中间件的预编译方法与系统,用以解决现有技术中预编译效率低的问题。
4.为实现上述目的,本发明实施例提供了一种基于分库分表中间件的预编译方法,包括:
5.接收客户端发送的第一预编译请求,所述第一预编译请求包括编译参数、目标预编译模板的目标模板标识及第一预编译标识;
6.基于所述目标模板标识从存储单元中查询与所述目标模板标识对应的预编译模板,并将所述编译参数填充至与所述目标模板标识对应的预编译模板,得到目标编译模板;
7.基于预设的路由规则将所述目标编译模板发送给数据库,以使所述数据库根据所述目标编译模板执行对应的结构化查询语句,得到目标结果集;并
8.将所述数据库返回的目标结果集返回给所述客户端。
9.进一步地,所述基于预设的路由规则将所述目标编译模板发送给数据库,以使所述数据库根据所述目标编译模板执行对应的结构化查询语句,得到目标结果集之前,所述方法还包括:
10.接收客户端发送的第二预编译请求,所述第二预编译请求包括预编译模板以及第二预编译标识符;
11.根据所述第二预编译标识符解析所述第二预编译请求,得到所述预编译模板;
12.解析所述预编译模板,得到所述预编译模板中包含的模板参数;
13.根据所述模板参数生成所述预编译模板的模板标识;
14.将所述模板标识与所述模板参数返回给所述客户端,以供所述客户端将所述预编译模板与所述模板标识关联并存储至所述存储单元中。
15.进一步地,所述存储单元预先存储有多个预编译模板,各个预编译模板用于对所述编译参数执行不同的结构化查询语句。
16.进一步地,所述存储单元为所述分库分表中间件的存储模块或者所述存储单元为外部缓存。
17.进一步地,当所述数据库设有多个且接收到所述客户端发送的多个第一预编译请求时,所述方法还包括:
18.基于所述预设的路由规则将多个所述第一预编译请求对应的目标编译模板分别发送给多个数据库。
19.进一步地,所述基于所述预设的路由规则将多个所述第一预编译请求对应的目标编译模板分别发送给多个数据库包括:
20.基于所述预设的路由规则将多个所述第一预编译请求对应的目标编译模板平均发送给多个数据库;或
21.获取每个数据库的执行情况;
22.基于所述预设的路由规则以及所述执行情况将多个所述第一预编译请求对应的目标编译模板分别发送给多个数据库。
23.进一步地,当所述数据库设有多个且接收到所述客户端发送的一个第一预编译请求时,所述方法还包括:
24.获取每个数据库的执行情况;
25.根据每个所述数据库的执行情况,从多个所述数据库中确定目标数据库;
26.基于所述预设的路由规则将所述第一预编译请求对应的目标编译模板发送给目标数据库。
27.为实现上述目的,本发明实施例提供了一种基于分库分表中间件的预编译系统,包括:
28.接收模块,用于接收客户端发送的第一预编译请求,所述第一预编译请求包括编译参数、目标预编译模板的目标模板标识及第一预编译标识;
29.查询模块,用于基于所述目标模板标识从存储单元中查询与所述目标模板标识对应的预编译模板,并将所述编译参数填充至与所述目标模板标识对应的预编译模板,得到目标编译模板;
30.发送模块,用于基于预设的路由规则将所述目标编译模板发送给数据库,以使所述数据库根据所述目标编译模板执行对应的结构化查询语句,得到目标结果集;及
31.返回模块,用于将所述数据库返回的目标结果集返回给所述客户端。
32.为实现上述目的,本发明实施例提供了一种计算机设备,所述计算机设备包括存储器、处理器,所述存储器上存储有可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现上述的基于分库分表中间件的预编译方法的步骤。
33.为实现上述目的,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序可被至少一个处理器所执行,以使所述至少一个处理器执行上述的基于分库分表中间件的预编译方法的步骤。
34.本发明实施例提供的基于分库分表中间件的预编译方法与系统,通过目标模板标识查询对应的目标预编译模板,将编译参数填充至目标预编译模板上,得到目标编译模板,再将目标编译模板传输给数据库进行运行,得到对应的结果集,节省了分库分表中间件针对每次编译请求进行编译代码编写的时间,提高了编译效率。
附图说明
35.图1为本发明基于分库分表中间件的预编译方法实施例一的流程图。
36.图2为本发明基于分库分表中间件的预编译系统实施例二的程序模块示意图。
37.图3为本发明计算机设备实施例三的硬件结构示意图。
具体实施方式
38.为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
39.需要说明的是,在本发明实施例中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
40.实施例一
41.参阅图1,示出了本发明实施例一之基于分库分表中间件的预编译方法的步骤流程图。可以理解,本方法实施例中的流程图不用于对执行步骤的顺序进行限定。下面以计算机设备2为执行主体进行示例性描述。具体如下。
42.步骤s100、接收客户端发送的第一预编译请求,所述第一预编译请求包括编译参数、目标预编译模板的目标模板标识及第一预编译标识。
43.具体地,第一预编译请求用于基于第一预编译标识,基于目标预编译模板对编译参数进行预编译操作,预编译操作包括sql预编译操作以及oracle预编译操作。编译参数包括目标预编译模板进行编译的数据,第一预编译标识用于指示数据库进行预编译操作。目标模板标识用于获取对应的预编译模板,从第一预编译请求中获取对应的目标模板标识。
44.步骤s102、基于所述目标模板标识从存储单元中查询与所述目标模板标识对应的预编译模板,并将所述编译参数填充至与所述目标模板标识对应的预编译模板,得到目标编译模板。
45.具体地,若分库分表中间件的存储模块预先存储有多个预编译模板,分库分表中间件根据目标模板标识获取对应的目标预编译模板,将编译参数填充至预编译模板得到目标编译模板。
46.在示例性地实施例中,为了更好的根据结构化查询语句进行预编译操作,所述存储单元预先存储有多个预编译模板,各个预编译模板用于对所述编译参数执行不同的结构化查询语句。
47.在示例性地实施例中,所述存储单元为所述分库分表中间件的存储模块或者所述存储单元为外部缓存。当存储单元为存储模块时,便于分库分表中间件进行预编译模板的查询。当存储单元为外部缓存时,便于客户端进行模板标识sqlid和预编译模板的映射关系的维护。分库分表中间件也可访问外部缓存进行预编译模板的查询。
48.步骤s104、基于预设的路由规则将所述目标编译模板发送给数据库,以使所述数据库根据所述目标编译模板执行对应的结构化查询语句,得到目标结果集。
49.具体地,在得到目标编译模板后,将目标编译模板与第一预编译标识根据预设的路由规则发送给对应的数据库,由数据库根据第一预编译标识对目标编译模板进行预编译,执行对应的结构化查询语句,执行对应的结构化查询语句即为sql语句,得到对应的目标结果集。路由规则包括访问数据库的路由路径,用于实现对目标编译模板的路由转发,可以把不同的目标编译模板根据路由路径发给不同的数据库。
50.步骤s106、将所述数据库返回的目标结果集返回给所述客户端。
51.具体地,分库分表中间件接收到数据库响应的目标结果集,将目标结果集返回给客户端。可以保证客户端使用无感知,还可以完美支持数据库预编译sql语句,不仅可以大幅减少客户端与数据库交互的次数,还可以减少每次交互数据包的大小,即增加了并发量,也提高了交互效率。
52.在示例性地实施例中,所述步骤s104之前,所述方法还包括:
53.步骤s110、接收客户端发送的第二预编译请求,所述第二预编译请求包括预编译模板以及第二预编译标识符。步骤s112、根据所述第二预编译标识符解析所述第二预编译请求,得到所述预编译模板。步骤s114、解析所述预编译模板,得到所述预编译模板中包含的模板参数。步骤s116、根据所述模板参数生成所述预编译模板的模板标识。步骤s118、将所述模板标识与所述模板参数返回给所述客户端,以供所述客户端将所述预编译模板与所述模板标识关联并存储至所述存储单元中。
54.具体地,客户端在第一次发起预编译请求时,即第二预编译请求,分库分表中间件会解析并记录其预编译语句sql,解析预编译语句以获取每条sql语句的功能,根据功能将预编译语句sql转换为预编译模板。例如:查询数据的sql语句、对查询数据进行处理的sql语句:排序的sql语句、求平均值的sql语句、取最大值的sql语句等,通过在sql语句中对应的关键词进行确定。例如:select username from userinfo的sql语句为查询数据的sql语句,关键词为select

from,并且没有出现其他关键词;select username from userinfo order by的sql语句为排序sql语句,关键词为order by。同时将对应的预编译模板生成一个模板标识sqlid,并返回模板标识sqlid和模板参数,模板参数包括预编译语句sql模板参数和要查询的列数等。客户端会在缓存中维护模板标识sqlid和预编译模板的映射关系,而后发起的预编译请求会包括有模板标识sqlid和对应的sql模板参数,用以进行预编译操作。分库分表中间件收到该预编译请求后根据模板标识sqlid找到对应的预编译模板,并将模板参数填充至预编译模板中。然后分库分表中间件根据路由规则将填充后的预编译模板转发到对应的数据库节点进行预编译(使用jdbc(java database connectivity,简称数据库链接)原生的预编译策略)。分库分表中间件收到数据库节点返回的结果集后返回给客户端。经过上述操作后,客户端第二次发送同样的预编译操作的请求时,即发送第一预编译请求时,可以不用再次发送预编译模板,只需要将对应的模板标识sqlid和模板参数发送给分库分表中间件即可查询到结果集,大大提高了预编译的效率。
55.为了提高编译的效率,在执行编译之前进行预编译操作。预编译即为将每次预编译语句被数据库db的编译器编译后的执行代码缓存下来,缓存的执行代码形成预编译模板。下次调用时只要是相同的预编译语句就不需要编译,只要将编译参数直接传入预编译
模板中就会得到执行。预编译之后的预编译模板多数情况下可以直接执行,数据库dbms不需要再次编译,越复杂的sql,编译的复杂度将越大,预编译阶段可以合并多次编译操作为一个操作,进而可以提升性能。
56.在示例性地实施例中,当所述数据库设有多个且接收到所述客户端发送的多个第一预编译请求时,为了防止数据库的压力过大,所述方法还包括:
57.基于所述预设的路由规则将多个所述第一预编译请求对应的目标编译模板分别发送给多个数据库。
58.在示例性地实施例中,所述基于所述预设的路由规则将多个所述第一预编译请求对应的目标编译模板分别发送给多个数据库包括:
59.基于所述预设的路由规则将多个所述第一预编译请求对应的目标编译模板平均发送给多个数据库;或
60.获取每个数据库的执行情况;
61.基于所述预设的路由规则以及所述执行情况将多个所述第一预编译请求对应的目标编译模板分别发送给多个数据库。
62.具体地,当第一预编译请求过多时,为了防止对单一数据库的压力过大,进而影响数据库的执行效率,基于每个数据库的执行情况,也可以说是运行情况,将多个第一预编译请求对应的目标编译模板分别发送给多个数据库。
63.在示例性地实施例中,当所述数据库设有多个且接收到所述客户端发送的一个第一预编译请求时,为了更好的进行预编译操作,所述方法还包括:
64.步骤s120、获取每个数据库的执行情况。步骤s122、根据每个所述数据库的执行情况,从多个所述数据库中确定目标数据库。步骤s124、基于所述预设的路由规则将所述第一预编译请求对应的目标编译模板发送给目标数据库。
65.具体地,为了提高执行效率,将目标编译模板发送给执行情况较好的目标数据库,即数据库执行压力小的目标数据库。
66.实施例二
67.请继续参阅图2,示出了本发明基于分库分表中间件的预编译系统实施例二的程序模块示意图。在本实施例中,基于分库分表中间件的预编译系统20可以包括或被分割成一个或多个程序模块,一个或者多个程序模块被存储于存储介质中,并由一个或多个处理器所执行,以完成本发明,并可实现上述基于分库分表中间件的预编译方法。本发明实施例所称的程序模块是指能够完成特定功能的一系列计算机程序指令段,比程序本身更适合于描述基于分库分表中间件的预编译系统20在存储介质中的执行过程。以下描述将具体介绍本实施例各程序模块的功能:
68.接收模块200,用于接收客户端发送的第一预编译请求,所述第一预编译请求包括编译参数、目标预编译模板的目标模板标识及第一预编译标识。
69.具体地,第一预编译请求用于基于第一预编译标识,基于目标预编译模板对编译参数进行预编译操作,预编译操作包括sql预编译操作以及oracle预编译操作。编译参数包括目标预编译模板进行编译的数据,第一预编译标识用于指示数据库进行预编译操作。目标模板标识用于获取对应的预编译模板,从第一预编译请求中获取对应的目标模板标识。
70.查询模块202,用于基于所述目标模板标识从存储单元中查询与所述目标模板标
识对应的预编译模板,并将所述编译参数填充至与所述目标模板标识对应的预编译模板,得到目标编译模板。
71.具体地,若分库分表中间件的存储模块预先存储有多个预编译模板,根据目标模板标识获取对应的目标预编译模板,将编译参数填充至预编译模板得到目标编译模板。
72.在示例性地实施例中,为了更好的进行预编译操作,所述存储单元预先存储有多个预编译模板,各个预编译模板用于对所述编译参数执行不同的预编译操作。
73.在示例性地实施例中,所述存储单元为所述分库分表中间件的存储模块或者所述存储单元为外部缓存。当存储单元为存储模块时,便于分库分表中间件进行预编译模板的查询。当存储单元为外部缓存时,便于客户端进行模板标识sqlid和预编译模板的映射关系的维护。分库分表中间件也可访问外部缓存进行预编译模板的查询。
74.发送模块204,用于基于预设的路由规则将所述目标编译模板发送给数据库,以使所述数据库根据所述目标编译模板执行对应的结构化查询语句,得到目标结果集。
75.具体地,在得到目标编译模板后,将目标编译模板与第一预编译标识根据预设的路由规则发送给对应的数据库,由数据库根据第一预编译标识对目标编译模板进行预编译,执行对应的结构化查询语句,执行对应的结构化查询语句即为sql语句,得到对应的目标结果集。路由规则包括访问数据库的路由路径,用于实现对目标编译模板的路由转发,可以把不同的目标编译模板根据路由路径发给不同的数据库。
76.返回模块206,用于将数据库返回的所述目标结果集返回给所述客户端。
77.具体地,分库分表中间件接收到数据库响应的目标结果集,将目标结果集返回给客户端。可以保证客户端使用无感知,还可以完美支持数据库预编译sql语句,不仅可以大幅减少客户端与数据库交互的次数,还可以减少每次交互数据包的大小,即增加了并发量,也提高了交互效率。
78.实施例三
79.参阅图3,是本发明实施例三之计算机设备的硬件架构示意图。本实施例中,所述计算机设备2是一种能够按照事先设定或者存储的指令,自动进行数值计算和/或信息处理的设备。该计算机设备2可以是机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者多个服务器所组成的服务器集群)等。如图3所示,所述计算机设备2至少包括,但不限于,可通过系统总线相互通信连接存储器21、处理器22、网络接口23、以及基于分库分表中间件的预编译系统20。其中:
80.本实施例中,存储器21至少包括一种类型的计算机可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,sd或dx存储器等)、随机访问存储器(ram)、静态随机访问存储器(sram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、可编程只读存储器(prom)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器21可以是计算机设备2的内部存储单元,例如该计算机设备2的硬盘或内存。在另一些实施例中,存储器21也可以是计算机设备2的外部存储设备,例如该计算机设备2上配备的插接式硬盘,智能存储卡(smart media card,smc),安全数字(secure digital,sd)卡,闪存卡(flash card)等。当然,存储器21还可以既包括计算机设备2的内部存储单元也包括其外部存储设备。本实施例中,存储器21通常用于存储安装于计算机设备2的操作系统和各类应用软件,例如实施例二的基于分库分表中间件的预编译系统20的程序代码等。此外,存储器21
还可以用于暂时地存储已经输出或者将要输出的各类数据。
81.处理器22在一些实施例中可以是中央处理器(central processing unit,cpu)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器22通常用于控制计算机设备2的总体操作。本实施例中,处理器22用于运行存储器21中存储的程序代码或者处理数据,例如运行基于分库分表中间件的预编译系统20,以实现实施例一的基于分库分表中间件的预编译方法。
82.所述网络接口23可包括无线网络接口或有线网络接口,该网络接口23通常用于在所述服务器2与其他电子装置之间建立通信连接。例如,所述网络接口23用于通过网络将所述服务器2与外部终端相连,在所述服务器2与外部终端之间的建立数据传输通道和通信连接等。所述网络可以是企业内部网(intranet)、互联网(internet)、全球移动通讯系统(global system of mobile communication,gsm)、宽带码分多址(wideband code division multiple access,wcdma)、4g网络、5g网络、蓝牙(bluetooth)、wi-fi等无线或有线网络。需要指出的是,图3仅示出了具有部件20-23的计算机设备2,但是应理解的是,并不要求实施所有示出的部件,可以替代的实施更多或者更少的部件。
83.在本实施例中,存储于存储器21中的所述基于分库分表中间件的预编译系统20还可以被分割为一个或者多个程序模块,所述一个或者多个程序模块被存储于存储器21中,并由一个或多个处理器(本实施例为处理器22)所执行,以完成本发明。
84.例如,图2示出了所述实现基于分库分表中间件的预编译系统20实施例二的程序模块示意图,该实施例中,所述基于分库分表中间件的预编译系统20可以被划分为所述接收模块200、所述查询模块202、所述发送模块204以及所述返回模块206。其中,本发明所称的程序模块是指能够完成特定功能的一系列计算机程序指令段,比程序更适合于描述所述基于分库分表中间件的预编译系统20在所述计算机设备2中的执行过程。所述程序模块200-206的具体功能在实施例二中已有详细描述,在此不再赘述。
85.实施例四
86.本实施例还提供一种计算机可读存储介质,如闪存、硬盘、多媒体卡、卡型存储器(例如,sd或dx存储器等)、随机访问存储器(ram)、静态随机访问存储器(sram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、可编程只读存储器(prom)、磁性存储器、磁盘、光盘、服务器、app应用商城等等,其上存储有计算机程序,程序被处理器执行时实现相应功能。本实施例的计算机可读存储介质用于计算机程序,被处理器执行时实现实施例一的基于分库分表中间件的预编译方法。
87.上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
88.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。
89.以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献