共享prepare statement的方法、系统和网络设备
技术领域
1.本技术实施例涉及通信技术领域,特别涉及一种共享prepare statement的方法、系统和网络设备。
背景技术:2.在分布式数据库的使用中,在中间件中引入连接池用以对数据库连接进行管理。当客户端需要访问数据库时,从连接池中选取一条已经建立的空闲连接;数据库连接使用结束后,客户端将连接放回连接池中,供下一个数据库访问请求使用,从而实现数据库连接的复用。
3.然而,在prepare statement模式下,由于连接没有被物理关闭,放回连接池中的连接会一直被prepare statement对象占用,而无法释放出空闲连接供下一个数据库访问请求使用,导致无法被下一个访问请求复用,无法共享prepare statement。
技术实现要素:4.本技术实施例的主要目的在于提出一种共享prepare statement的方法、系统和网络设备,旨在达到在全局prepare statement对象缓存池中获取prepare statement对象,而不需要缓存当前连接上的解析过的语句的目的,从而实现共享prepare statement的功能。
5.为实现上述目的,本技术实施方式提供了一种共享prepare statement的方法,包括:接收执行请求,其中,所述执行请求携带全局prepare statement对象的识别标识和执行参数;根据所述全局prepare statement对象的识别标识在全局prepare statement对象缓存池中查找全局prepare statement对象,获取所述全局prepare statement对象,其中,所述全局prepare statement对象是编译过的结构化查询语言sql语句;根据所述全局prepare statement对象和所述执行参数确定执行计划并执行。
6.为实现上述目的,本技术实施例还提供了一种共享prepare statement的系统,包括:客户端,用于向中间件发送预备请求,接收创建成功响应,并根据所述创建成功响应向中间件发送执行请求;中间件,用于接收执行请求,其中,所述执行请求携带全局prepare statement对象的识别标识和执行参数;根据所述全局prepare statement对象的识别标识在全局prepare statement对象缓存池中查找全局prepare statement对象,获取所述全局prepare statement对象,其中,所述全局prepare statement对象是编译过的结构化查询语言sql语句;根据所述全局prepare statement对象和所述执行参数确定执行指令并执行。数据库,用于接收执行请求,其中,所述执行请求携带全局prepare statement对象的识别标识和执行参数;根据所述全局prepare statement对象的识别标识在全局prepare statement对象缓存池中查找全局prepare statement对象,获取所述全局prepare statement对象,其中,所述全局prepare statement对象是编译过的结构化查询语言sql语句;根据所述全局prepare statement对象和所述执行参数确定执行指令并执行。
7.为实现上述目的,本技术实施方式还提供了一种网络设备,包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行上述的共享prepare statement的方法。
8.本技术提出的共享prepare statement的方法、系统和网络设备,其通过接收执行请求,其中执行请求携带执行参数和全局prepare statement对象的识别标识,根据识别标识在缓存池中查找全局prepare statement对象,全局prepare statement对象与执行参数结合得到执行计划并执行,全局prepare statement对象不需要缓存当前连接上的解析过的语句,占用数据库连接,而是直接从已缓存在全局prepare statement对象缓存中查找获取全局prepare statement对象。可见,本技术方案,其可实现通过在全局prepare statement对象缓存池中获取prepare statement对象,而不需要缓存当前连接上的解析过的语句,来实现共享prepare statement的功能。
附图说明
9.图1是本发明的第一实施方式提供的共享prepare statement的方法的流程图一;
10.图2是本发明的第一实施方式提供的共享prepare statement的方法的流程图二;
11.图3是本发明的第二实施方式提供的共享prepare statement的方法的流程图;
12.图4是图3所示的本发明的第二实施方式提供的共享prepare statement的方法中步骤103的流程图;
13.图5是本发明的第三实施方式提供的共享prepare statement的方法的流程图;
14.图6是本发明的第四实施方式提供的共享prepare statement的方法的流程图;
15.图7是本发明的第五实施方式提供的共享prepare statement的系统的结构示意图;
16.图8是本发明的第六实施方式提供的网络设备的结构示意图。
具体实施方式
17.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合附图对本技术的各实施例进行详细的阐述。然而,本领域的普通技术人员可以理解,在本技术各实施例中,为了使读者更好地理解本技术而提出了许多技术细节。但是,即使没有这些技术细节和基于以下各实施例的种种变化和修改,也可以实现本技术所要求保护的技术方案。以下各个实施例的划分是为了描述方便,不应对本技术的具体实现方式构成任何限定,各个实施例在不矛盾的前提下可以相互结合相互引用。
18.本发明的第一实施方式涉及一种共享prepare statement的方法,应用在访问分布式数据库的过程中,其流程如图1所示,包括:
19.步骤101,接收执行请求,其中,执行请求携带全局prepare statement对象的识别标识和执行参数。
20.具体地说,在本实施方式中,执行参数是sql语句的参数,对请求进行解析才可以获得,不可以直接获取,可以包括:access数据库中的oledb parameter、mysql数据库中的mysql parameter等。当然,以上仅为具体的举例说明,在实际的使用过程中执行参数还可
以包括其他参数,此处不做一一赘述。
21.具体地说,本实施方式不对全局prepare statement对象的识别标识进行限定,在实际的使用过程中,全局prepare statement对象的识别标识可以为任意一种能够唯一指示全局prepare statement对象的标识。
22.步骤102,根据全局prepare statement对象的识别标识在全局prepare statement对象缓存池中查找全局prepare statement对象,获取全局prepare statement对象,其中,全局prepare statement对象是编译过的结构化查询语言sql语句。
23.步骤103,根据全局prepare statement对象和执行参数确定执行计划并执行。
24.具体地说,在本实施方式中,执行计划是数据库服务器在执行sql语句的时候,会准备几套方案,最后选择的消耗资源最小的方案。
25.需要说明的是,本实施方式的执行主体,可以是中间件,也可以是数据库。
26.需要说明的是,在本实施方式中,全局prepare statement对象缓存池用于缓存全局prepare statement对象,全局prepare statement对象缓存池中缓存的全局prepare statement对象可以是预先存储的,也可以是从客户端获取的。如果是预先存储的,该全局prepare statement对象可以由用户通过手动录入的方式进行存储;如果是从客户端获取的,如图2所示,在步骤101之前,还包括:
27.步骤201,接收预备请求,其中,预备请求包含结构化查询语言sql语句。
28.步骤202,sql语句是否能够匹配到全局preparestatement对象缓存池内的全局preparestatement对象。
29.具体地说,若未匹配到preparestatement对象,则sql语句未执行过,执行步骤203,若匹配到preparestatement对象,则sql语句执行过,执行步骤204。
30.步骤203,根据sql语句生成全局prepare statement对象并插入全局prepare statement对象缓存池,生成全局prepare statement对象的识别标识和计数值,其中,计数值是全局prepare statement对象缓存池内全局prepare statement对象的数量。
31.本实施方式不对生成全局prepare statement对象的识别标识的策略进行限定,在实际的使用过程中可以根据具体需求设置选取策略,例如:策略可以按照生成的先后顺序生成识别标识,也可以为按照自定义的规律对识别标识进行生成,此处不做一一赘述。
32.步骤204,获取匹配到的全局prepare statement对象的识别标识。
33.步骤205,返回创建成功响应,其中,创建成功响应携带全局prepare statement对象的识别标识。
34.需要说明的是,本实施方式中数据库和中间件中产生的全局prepare statement对象是不完全相同的,一方面,全局prepare statement对象还包含sql语句传达过程中的发送、接收关系,另一方面,中间件可能会对sql语句进行改写,例如产生不同的sql语句或者改写为多条sql语句,从而发送给数据库的预备请求包含的sql语句可能与客户端发送的预备请求包含的sql语句不同。因此,中间件和数据库的全局prepare statement对象缓存池也会响应在缓存内容上的产生不同。
35.本发明实施方式相对于现有技术而言,客户端访问分布式数据库时,通过接收执行请求,其中执行请求携带执行参数和全局prepare statement对象的识别标识,根据识别标识在缓存池中查找全局prepare statement对象,全局prepare statement对象与执行参
数结合得到执行计划并执行,全局prepare statement对象不需要缓存当前连接上的解析过的语句,占用数据库连接,而是直接从已缓存在全局prepare statement对象缓存中查找获取全局prepare statement对象。可见,本技术方案,其可实现通过在全局prepare statement对象缓存池中获取prepare statement对象,而不需要缓存当前连接上的解析过的语句,来实现共享prepare statement的功能,解决了现有技术无法共享prepare statement的问题。
36.本发明的第二实施方式涉及一种共享prepare statement的方法,该方法与本发明的第一实施方式提供的共享prepare statement的方法基本相同,其区别在于,应用在中间件上,如图3所示:
37.具体地,步骤203之后还包括:
38.步骤301,从连接池中选取一条空闲的数据库连接,连接数据库,并向数据库发送预备请求。
39.具体地说,在本实施方式中,连接池中保存有预先设置的多个数据库连接对象,可以直接从中选取数据库连接,用以连接数据库。
40.具体地说,在本实施方法中,预备请求中包含的sql语句是经过中间件改写后的sql语句。
41.步骤302,接收数据库返回的由数据库生成的全局preparestatement对象的识别标识并保存。
42.具体地说,在本实施方式中,由数据库生成的全局preparestatement对象的识别标识和由中间件生成的全局prepare statement对象的识别标识会被一起保存,从而保存由数据库生成的全局preparestatement对象和由中间件生成的全局prepare statement对象的对应关系。
43.具体地,如图4,步骤103包括:
44.步骤401,根据全局preparestatement对象的识别标识在全局preparestatement对象缓存池内查找全局preparestatement对象和数据库中的全局preparestatement对象的识别标识。
45.步骤402,根据全局preparestatement对象和执行参数生成执行计划。
46.步骤403,根据执行计划确定数据库节点和数据库的执行参数。
47.步骤404,将数据库的执行参数和数据库中的全局preparestatement对象的识别标识发送给数据库节点,供数据库进行响应。
48.需要说明的是,在本实施方式中,数据库中的全局preparestatement对象的识别标识可以与中间件中的全局preparestatement对象的识别标识相同;数据库中的全局preparestatement对象的识别标识也可以与中间件中的全局preparestatement对象的识别标识不同。本实施方式不对数据库中的全局preparestatement对象的识别标识和中间件中的全局preparestatement对象的识别标识的内容进行限定。
49.本发明实施方式相对于现有技术而言,在实现第一实施方式带来的有益效果基础上,将中间件中的连接池和全局preparestatement对象结合起来,充分利用现有资源,优化了预处理流程,节省了资源,提升了效率,切断了中间件与数据库节点之间的链路绑定,减少了同一时间后端链路的数量,提高了连接池的使用效率,降低了对后端单机数据库的连
接压力。
50.本发明的第三实施方式涉及一种共享prepare statement的方法,该方法与本发明的第一实施方式提供的共享prepare statement的方法基本相同,其区别在于,应用在数据库上,如图5所示:
51.步骤501,接收中间件发送的预备请求,其中,预备请求包含结构化查询语言sql语句。
52.具体的说,本步骤与第一实施例中的步骤201大致相同,此处不一一赘述。
53.步骤502,将sql语句与全局preparestatement对象缓存池内的所有全局preparestatement对象进行匹配。
54.具体的说,本步骤与第一实施例中的步骤202相同,此处不一一赘述。
55.步骤503,根据sql语句生成全局prepare statement对象并插入全局prepare statement对象缓存池,生成全局prepare statement对象的识别标识和计数值,其中,计数值是全局prepare statement对象缓存池内全局prepare statement对象的数量。
56.具体的说,本步骤与第一实施例中的步骤203相同,此处不一一赘述。
57.步骤504,获取匹配到的全局prepare statement对象的识别标识。
58.具体的说,本步骤与第一实施例中的步骤204相同,此处不一一赘述。
59.步骤505,返回中间件创建成功响应,其中,创建成功响应携带全局prepare statement对象的识别标识。
60.具体的说,本步骤与第一实施例中的步骤205大致相同,此处不一一赘述。
61.步骤506,接收中间件发送的执行请求,其中,执行请求携带全局prepare statement对象的识别标识和执行参数。
62.具体的说,本步骤与第一实施例中的步骤101大致相同,此处不一一赘述。
63.步骤507,根据全局prepare statement对象的识别标识在全局prepare statement对象缓存池中查找全局prepare statement对象,获取全局prepare statement对象,其中,全局prepare statement对象是编译过的结构化查询语言sql语句。
64.具体的说,本步骤与第一实施例中的步骤102大致相同,此处不一一赘述。
65.步骤508,根据全局prepare statement对象和执行参数确定执行计划并按照执行计划对数据库进行处理。
66.具体的说,本步骤与第一实施例中的步骤102大致相同,此处不一一赘述。
67.本发明实施方式相对于现有技术而言,在实现第一实施方式带来的有益效果基础上,数据库对全局prepare statement对象进行存储,便于下一次访问数据库时直接利用,减少了硬解析的次数,优化了prepared statement流程,节省了资源,提升了效率。
68.本发明的第四实施方式涉及一种共享prepare statement的方法,该方法与本发明的第一实施方式提供的共享prepare statement的方法基本相同,其区别在于,还需要删除全局preparestatement对象,如图6所示:
69.步骤601,接收关闭请求,其中,关闭请求携带结构化查询语言sql语句和全局preparestatement对象的识别标识。
70.具体地说,在本实施方式中,sql语句是删除指令,全局preparestatement对象的识别标识对应的全局preparestatement对象是删除操作的对象。
71.步骤602,判断计数值是否等于预设的阈值。
72.具体地说,若计数值等于预设的阈值,执行步骤603,若计数值不等于预设的阈值,执行步骤604。
73.具体地说,在本实施方式中,预设的阈值是在每次启用时都会根据实际情况进行更新的值,反映当前配置的数量,不可以随意更改。
74.步骤603,根据所述全局preparestatement对象的识别标识在所述全局preparestatement对象缓存池内查找全局preparestatement对象,根据sql语句删除全局preparestatement对象。
75.步骤604,返回关闭成功响应。
76.需要说明的时,在本实施方式中,执行主体可以是中间件,也可以是数据库,区别在于,如执行主体是中间件,当计数值不等于预设的阈值时,中间件直接返回关闭成功响应,而不会继续向数据库发送关闭请求。
77.本发明实施方式相对于现有技术而言,在实现第一实施方式带来的有益效果基础上,对已经缓存的全局preparestatement对象进行删除,将中间件和数据库中的全局preparestatement对象缓存池的空间释放出来,便于添加新的全局preparestatement对象,使得共享preparestatement的方法能够满足客户端内容多样的预备请求和执行请求,更加满足客户端需求。
78.本发明的第五实施方式涉及一种共享prepare statement的方法系统,如图7所示,包括:
79.客户端701,用于向中间件702发送预备请求,接收创建成功响应,并根据创建成功响应向中间件702发送执行请求。
80.中间件702,用于接收客户端701发送的执行请求,其中,执行请求携带全局prepare statement对象的识别标识和执行参数;根据全局prepare statement对象的识别标识在全局prepare statement对象缓存池中查找全局prepare statement对象,获取全局prepare statement对象,其中,全局prepare statement对象是编译过的结构化查询语言sql语句;根据全局prepare statement对象和执行参数确定执行指令并执行。
81.数据库703,用于接收中间件704发送的执行请求,其中,执行请求携带全局prepare statement对象的识别标识和执行参数;根据全局prepare statement对象的识别标识在全局prepare statement对象缓存池中查找全局prepare statement对象,获取全局prepare statement对象,其中,全局prepare statement对象是编译过的结构化查询语言sql语句;根据全局prepare statement对象和执行参数确定执行指令并执行。
82.本发明第六实施方式涉及一种网络设备,如图8所示,包括:
83.至少一个处理器801;以及,
84.与所述至少一个处理器801通信连接的存储器802;其中,
85.所述存储器802存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器801执行,以使所述至少一个处理器801能够执行本发明第一至第四实施方式所述的共享prepare statement的方法。
86.其中,存储器和处理器采用总线方式连接,总线可以包括任意数量的互联的总线和桥,总线将一个或多个处理器和存储器的各种电路连接在一起。总线还可以将诸如外围
设备、稳压器和功率管理电路等之类的各种其他电路连接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口在总线和收发机之间提供接口。收发机可以是一个元件,也可以是多个元件,比如多个接收器和发送器,提供用于在传输介质上与各种其他装置通信的单元。经处理器处理的数据通过天线在无线介质上进行传输,进一步,天线还接收数据并将数据传送给处理器。
87.处理器负责管理总线和通常的处理,还可以提供各种功能,包括定时,外围接口,电压调节、电源管理以及其他控制功能。而存储器可以被用于存储处理器在执行操作时所使用的数据。
88.本领域的普通技术人员可以理解,上述各实施方式是实现本发明的具体实施例,而在实际应用中,可以在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。