一种数据访问控制方法、系统、设备及介质与流程

文档序号:23904552发布日期:2021-02-09 14:32阅读:76来源:国知局
一种数据访问控制方法、系统、设备及介质与流程

[0001]
本发明实施例涉及计算机技术,尤其涉及一种数据访问控制方法、系统、设备及介质。


背景技术:

[0002]
随着信息技术的高速发展,需要存储在数据库中的文字、图像、视频等多种形式的数据呈指数级增长,容易造成数据库压力过大,分布式数据库应运而生。
[0003]
分布式数据库能够将业务请求sql(structured query language,结构化查询语言)进行分解,在多个子数据库上处理,并将最终结果汇总至客户端,其中,在访问各子数据库时,客户端与子数据库建立连接的时间和资源开销都会很大,因此,现有分布式数据库中间件通常使用连接池技术缓存和复用已有的连接。但是,实际业务中,不同业务有不同的数据库访问模式和生命周期,业务请求sql之间会产生比较复杂的上下文生命周期,现有的连接池技术已经不能灵活的进行连接生命周期的管理。


技术实现要素:

[0004]
本发明实施例提供一种数据访问控制方法、设备及介质,通过连接管理器对有状态连接的生命周期进行管理,能够在高并发场景下实现节省连接资源的效果。
[0005]
第一方面,本发明实施例提供了一种数据访问控制方法,所述方法应用于会话管理器中,包括:
[0006]
根据对数据库请求的解析结果以及所述数据库请求的类型,确定至少一个命令原语,以及与命令原语匹配的目标连接管理器;
[0007]
其中,连接管理器与子数据库关联,连接管理器包括有状态连接池,所述有状态连接池中的有状态连接为指向子数据库的连接;
[0008]
如果根据当前会话的至少一个标志位状态以及数据库请求的类型,确定满足命令原语发送条件,则分别向各所述目标连接管理器发送匹配的命令原语;
[0009]
其中,命令原语用于指示连接管理器在有状态连接池中获取目标有状态连接进行状态调整,和/或,使用目标有状态连接对匹配的子数据库进行数据访问。
[0010]
第二方面,本发明实施例提供了一种数据访问控制方法,所述方法应用于连接管理器中,包括:
[0011]
接收会话管理器发送的命令原语;
[0012]
根据所述命令原语,在有状态连接池中获取目标有状态连接,并对所述目标有状态连接进行状态调整,和/或,使用目标有状态连接对匹配的子数据库进行数据访问。
[0013]
第三方面,本发明实施例提供了一种数据访问控制系统,所述系统包括:至少两个子数据库、与各子数据库分别对应的连接管理器,以及至少一个会话管理器;各子数据库与其对应的连接管理器通信连接,各会话管理器与各连接管理器通信连接;所述连接管理器包括有状态连接池,所述有状态连接池中的有状态连接为指向子数据库的连接;
[0014]
所述会话管理器,用于根据对数据库请求的解析结果以及所述数据库请求的类型,确定至少一个命令原语,以及与命令原语匹配的目标连接管理器,如果根据当前会话的至少一个标志位状态以及数据库请求的类型,确定满足命令原语发送条件,则分别向各所述目标连接管理器发送匹配的命令原语;
[0015]
所述连接管理器,用于接收会话管理器发送的命令原语,并根据所述命令原语,在有状态连接池中获取目标有状态连接,并对所述目标有状态连接进行状态调整,和/或,使用目标有状态连接对匹配的子数据库进行数据访问。
[0016]
第四方面,本发明实施例还提供了一种计算机设备,包括处理器和存储器,存储器用于存储指令,当指令执行时使得处理器执行以下操作:
[0017]
根据对数据库请求的解析结果以及所述数据库请求的类型,确定至少一个命令原语,以及与命令原语匹配的目标连接管理器;
[0018]
其中,连接管理器与子数据库关联,连接管理器包括有状态连接池,所述有状态连接池中的有状态连接为指向子数据库的连接;
[0019]
如果根据当前会话的至少一个标志位状态以及数据库请求的类型,确定满足命令原语发送条件,则分别向各所述目标连接管理器发送匹配的命令原语;
[0020]
其中,命令原语用于指示连接管理器在有状态连接池中获取目标有状态连接进行状态调整,和/或,使用目标有状态连接对匹配的子数据库进行数据访问。
[0021]
或者用于执行:
[0022]
接收会话管理器发送的命令原语;
[0023]
根据所述命令原语,在有状态连接池中获取目标有状态连接,并对所述目标有状态连接进行状态调整,和/或,使用目标有状态连接对匹配的子数据库进行数据访问。
[0024]
第五方面,本发明实施例还提供了一种存储介质,存储介质用于存储指令,指令用于执行:
[0025]
根据对数据库请求的解析结果以及所述数据库请求的类型,确定至少一个命令原语,以及与命令原语匹配的目标连接管理器;
[0026]
其中,连接管理器与子数据库关联,连接管理器包括有状态连接池,所述有状态连接池中的有状态连接为指向子数据库的连接;
[0027]
如果根据当前会话的至少一个标志位状态以及数据库请求的类型,确定满足命令原语发送条件,则分别向各所述目标连接管理器发送匹配的命令原语;
[0028]
其中,命令原语用于指示连接管理器在有状态连接池中获取目标有状态连接进行状态调整,和/或,使用目标有状态连接对匹配的子数据库进行数据访问。
[0029]
或者用于执行:
[0030]
接收会话管理器发送的命令原语;
[0031]
根据所述命令原语,在有状态连接池中获取目标有状态连接,并对所述目标有状态连接进行状态调整,和/或,使用目标有状态连接对匹配的子数据库进行数据访问。
[0032]
本发明实施例的技术方案,会话管理器根据对数据库请求的解析结果以及数据库请求的类型,确定至少一个命令原语,以及与命令原语匹配的目标连接管理器,其中,连接管理器与子数据库关联,连接管理器包括有状态连接池,有状态连接池中的有状态连接为指向子数据库的连接,如果根据当前会话的至少一个标志位状态以及数据库请求的类型,
确定满足命令原语发送条件,则分别向各目标连接管理器发送匹配的命令原语,解决了现有技术中不能基于业务sql灵活管理连接的生命周期的问题,能够在高并发场景下实现节省连接资源的效果。
附图说明
[0033]
图1是本发明实施例一中的一种数据访问控制方法的流程图;
[0034]
图2a是本发明实施例二中的一种数据访问控制方法的流程图;
[0035]
图2b是本发明实施例二中确定命令原语是否发送的判断流程图;
[0036]
图3a是本发明实施例三中的一种数据访问控制方法的流程图;
[0037]
图3b是本发明实施例三中连接管理器获取有状态连接的流程图;
[0038]
图3c是本发明实施例三中连接处理线程执行begin命令原语的流程图;
[0039]
图3d是本发明实施例三中连接处理线程执行reserved命令原语的流程图;
[0040]
图3e是本发明实施例三中连接处理线程执行execute命令原语的流程图;
[0041]
图3f是本发明实施例三中连接处理线程执行conclude命令原语的流程图;
[0042]
图3g是本发明实施例三中连接处理线程执行release命令原语的流程图;
[0043]
图4是本发明实施例四中的一种数据访问控制系统的结构示意图;
[0044]
图5是本发明实施例五中的一种数据访问控制装置的结构示意图;
[0045]
图6是本发明实施例六中的一种数据访问控制装置的结构示意图;
[0046]
图7是本发明实施例七提供的一种计算机设备的结构示意图。
具体实施方式
[0047]
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
[0048]
在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作(或步骤)描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
[0049]
本文使用的术语“会话管理器”用于管理客户端建立会话的状态,并对客户端发送的数据库请求进行解析和拆分,生成至少一个命令原语,发送至相应的连接管理器。
[0050]
本文使用的术语“连接管理器”用于根据会话管理器发送的命令原语,管理有状态连接池中指向与其对应的子数据的连接的生命周期。
[0051]
本文使用的术语“有状态连接池”中存储了至少一个有状态连接,各有状态连接均为指向与当前连接管理器对应的子数据库的连接。
[0052]
本文使用的术语“数据库请求”是客户端向会话管理器发送的sql请求,包含对有状态连接的管理sql,和/或具体的对数据库进行访问的业务sql。
[0053]
本文使用的术语“命令原语”是会话管理器根据客户端发送的数据库请求生成的面向连接管理器的指令,用于指示连接管理器在有状态连接池中获取目标有状态连接进行
状态调整,和/或,使用目标有状态连接对匹配的子数据库进行数据访问。
[0054]
实施例一
[0055]
图1为本发明实施例一中的一种数据访问控制方法的流程图,本实施例的技术方案适用于通过连接管理器进行到子数据库的连接生命周期的管理的情况,该方法可以由数据访问控制装置执行,该装置可以由软件和/或硬件来实现,并可以集成在各种通用计算机设备中,具体包括如下步骤:
[0056]
步骤110、根据对数据库请求的解析结果以及数据库请求的类型,确定至少一个命令原语,以及与命令原语匹配的目标连接管理器;其中,连接管理器与子数据库关联,连接管理器包括有状态连接池,有状态连接池中的有状态连接为指向子数据库的连接。
[0057]
当客户端与分布式数据库建立起一个会话后,会话管理器将启动一个会话处理线程,去处理当前客户端发送的数据库请求,其中,数据库请求是客户端向会话管理器发送的sql请求。会话管理器会对客户端发送的数据库请求进行解析,确定当前发送的数据库请求中包含的业务sql,并且根据对上下文生命周期的影响,确定当前发送的数据库请求的类型。当然,若有多个客户端同时向同一个会话管理器发送数据库请求,则会话管理器开启多个会话处理线程同时处理多个客户端发送的数据库请求。其中,业务sql是指具体的查询数据或者写入数据等类型的sql,数据库请求的类型可以分为一下4类:
[0058]
1)事务开启sql,通常用begin或者start transaction标示;
[0059]
2)事务结束sql,例如,提交(commit)或者回滚(rollback);
[0060]
3)会话级资源获取sql,包括任何会获取生命周期为会话级的sql,包括获取命名锁(get_lock)、创建临时表等;
[0061]
4)其它sql。
[0062]
本实施例中,会话管理器接收到客户端发送的数据库请求后,首先对数据库请求进行解析和归类,具体的,会话管理器针对当前客户端建立的会话开启一个会话处理线程,对接收到的数据库请求进行解析,确定当前数据库请求包含的业务sql,并且根据数据库请求对后续上下文生命周期的影响,确定当前数据库请求的类型为上述4中类型的哪一种。
[0063]
在得到对数据库请求的解析结果和数据库请求的类型后,根据数据库请求的解析结果和数据库请求的类型,确定向连接管理器发送的命令原语,具体的,可以根据数据库请求的类型,确定命令原语接口,并将数据库请求的解析结果中包含的业务sql作为命令原语的参数,最终由命令原语接口和命令原语的参数组成命令原语,其中,连接处理器可以对外提供表1中包含的命令原语接口,供会话管理器调用。
[0064]
表1
[0065]
接口名称参数列表返回值列表beginconnid(可选)connid,errorreserveconnid(可选)connid,errorexecuteconnid(可选),sql(必须)resultset,errorconcludeconnid(必须),sql(必须)connid,errorreleaseconnid(必须)error
[0066]
在确定命令原语后,根据解析结果中包含的目标子数据库,确定与目标子数据库对应的连接管理器作为目标连接管理器。具体的,对数据库请求的解析结果中包含业务sql
为“select*from t1 where age=10”,即当前业务sql为需要从表t1中进行数据查询,则可以从与会话管理器连接的元数据库中查找表t1在哪个子数据库中存储,并将该子数据库作为目标子数据库,将目标子数据库的对应的连接管理器作为目标连接管理器。
[0067]
其中,一个连接管理器与一个子数据库对应,用于维护指向子数据的连接的生命周期,连接管理器中包括有状态连接池,有状态连接池中存储了至少一个有状态连接,各有状态连接均为指向与当前连接管理器对应的子数据的连接。
[0068]
步骤120、如果根据当前会话的至少一个标志位状态以及数据库请求的类型,确定满足命令原语发送条件,则分别向各目标连接管理器发送匹配的命令原语;
[0069]
其中,命令原语用于指示连接管理器在有状态连接池中获取目标有状态连接进行状态调整,和/或,使用目标有状态连接对匹配的子数据库进行数据访问。
[0070]
本实施例中,在确定命令原语和目标连接管理器后,根据当前会话的至少一个标志位状态和数据库请求的类型,确定是否满足命令原语发送条件,在满足命令原语发送条件时,将命令原语发送至目标连接管理器。
[0071]
具体的,根据数据库请求的解析结果,生成执行计划,执行计划具体包括命令原语和子数据库的对应关系,然后根据执行计划,以子数据库为单位,开启多个线程,每个线程根据当前会话的至少一个标志位状态以及数据请求的类型确定是否满足命令原语的发送条件,如果满足,则将命令原语发送到对应的连接管理器。
[0072]
示例性的,当客户端发送的数据库请求为步骤110中描述的第3种类型,即会话级资源获取sql,则首先根据当前线程对应的目标子数据库,确定指向目标子数据库的至少一个有状态连接中针对当前会话的有状态连接的保留标志位状态,若保留标志位状态为假,且当前会话的保留标志位状态为真,则会话管理器调用reserve命令原语,以使连接管理器根据reserve命令原语更新目标有状态连接的标志位状态,即将目标有状态连接的保留标志位状态更新为真,同时会话管理器接收连接管理器反馈的目标有状态连接的标识,并将目标有状态连接的标识和目标有状态连接更新后的状态进行保存。
[0073]
本发明实施例的技术方案,会话管理器根据对数据库请求的解析结果以及数据库请求的类型,确定至少一个命令原语,以及与命令原语匹配的目标连接管理器,其中,连接管理器与子数据库关联,连接管理器包括有状态连接池,有状态连接池中的有状态连接为指向子数据库的连接,如果根据当前会话的至少一个标志位状态以及数据库请求的类型,确定满足命令原语发送条件,则分别向各目标连接管理器发送匹配的命令原语,解决了现有技术中不能基于业务sql灵活管理连接的生命周期的问题,能够在高并发场景下实现节省连接资源的效果。
[0074]
实施例二
[0075]
图2a为本发明实施例二中的一种数据访问控制方法的流程图,本实施例在上述实施例的基础上进一步细化,提供了根据对数据库请求的解析结果以及所述数据库请求的类型,确定至少一个命令原语,以及与命令原语匹配的目标连接管理器的具体步骤,以及根据当前会话的标志位状态以及数据库请求的类型,确定满足命令原语发送条件的具体步骤。下面结合图2a对本发明实施例二提供的一种数据访问控制方法进行说明,包括以下步骤:
[0076]
步骤210、当客户端的数据库请求的类型满足会话状态更新条件,则根据数据库请求的类型,更新当前会话的至少一个标志位状态。
[0077]
当客户端与分布式数据库建立一个会话后,会话管理器将会开启一个会话处理线程,并处理该会话的数据库请求。每个会话处理线程中,以c++语言为例描述描述一个会话的核心数据结构如下:
[0078]
typedef struct session{
[0079]
bool intransaction;//会话当前是否在多行事务中
[0080]
bool inreserved;//会话是否有sql获取过会话级资源
[0081]
vector<sessionshard>shards;//到涉及的子数据库的连接描述信息列表
[0082]
}session;
[0083]
其中,会话的标志位包括,intransaction标志位,用于标识当前会话是否在多行事务中,以及inreserved标志位,用于标识当前会话是否获取过会话级资源,另外,该数据结构中还包括了当前会话涉及的子数据的连接描述信息列表,即上述sessionshard列表,其中包含了指向当前会话涉及的至少一个子数据库的至少一个连接,具体的,sessionshard的数据结构如下:
[0084]
typedef struct sessionshard{
[0085]
target*target;
[0086]
conn_id_t connid;
[0087]
bool intransaction;
[0088]
bool inreserved;
[0089]
}sessionshard;
[0090]
其中,target表示当前sessionshard对应的目标子数据库,connid表示目标子数据库针对当前会话的目标有状态连接的标识,intransaction标志位,用于表示目标有状态连接是否在事务中,inreserved标志位,用于表示目标有状态连接是否处于保留状态。
[0091]
本实施例中,在对客户端发送的数据库请求进行解析,确定数据库请求的类型后,判断当前数据库请求的类型是否满足会话状态更新条件,如果是,则根据数据库请求的类型,对当前会话的至少一个标志位状态进行更新。也就是说,根据数据库请求的类型,确定当前接收到的数据库请求是否需要改变当前会话的标志位状态。示例性的,当数据库请求的类型属于事务开启sql,则确定满足会话状态更新条件,此时需要将会话状态中的intransaction标志位设置为真,当数据库请求的类型属于会话级资源获取sql,则确定满足会话状态更新条件,此时需要将会话状态中的inreserved标志位设置为真。
[0092]
步骤220、如果当前存储有目标有状态连接的标识,则根据数据库请求的类型确定命令原语接口,并将数据库请求的解析结果和目标有状态连接的标识作为命令原语的参数,由命令原语接口和命令原语的参数共同构成命令原语,最终根据解析结果,确定与命令原语匹配的目标连接管理器。
[0093]
本实施例中,如果会话管理开启的会话处理线程中存储有目标有状态连接的标识,则根据数据库请求的类型确定命令原语接口,然后将数据库请求的解析结果和目标有状态连接的标识作为命令原语的参数,最终由命令原语接口和命令原语的参数共同组成命令原语。数据库请求的解析结果中包含具体的进行子数据库访问的业务sql,将这些业务sql作为命令原语的参数,另外,如果当前会话处理线程中存储有指向目标子数据库的目标有状态连接的标识时,将该目标有状态连接的标识作为命令原语的参数,一起发送至连接
管理器,以指示连接管理器获取该目标有状态连接,并更新目标有状态连接的标志位状态。其中,会话处理线程中存储的目标有状态连接的标识是向连接管理器发送begin或者reserve命令原语时,由连接管理器反馈的。进一步的,会话处理线程根据元数据库中存储的数据描述信息,确定当前数据库请求涉及的至少一个目标子数据库,从而将至少一个目标子数据库对应的连接管理器作为目标连接管理器。其中,元数据库中存储了针对各子数据库的数据描述信息,例如,当前数据库请求需要查询表t1,则会话管理器可以从源数据中查询表t1在哪些子数据库中存储。
[0094]
示例性的,可以根据数据库请求的类型和命令原语接口的对应关系确定命令原语接口,具体的,当数据库请求的类型为事务开启sql,则确定命令原语接口为begin;当数据库请求的类型为会话级资源获取sql,则确定命令原语接口为reserve;当数据库请求的类型为具体的业务sql,则确定命令原语接口为execute;当数据库请求的类型为事务结束sql,则确定命令原语接口为conclude;当客户端关闭会话时,确定命令原语接口为release。
[0095]
步骤230、如果当前未存储目标有状态连接的标识,则根据数据库请求的类型确定命令原语接口,并将数据库请求的解析结果作为命令原语的参数,由命令原语接口和命令原语的参数共同构成命令原语,最终根据解析结果,确定与命令原语匹配的目标连接管理器。
[0096]
本实施例中,如果会话处理线程当前未存储目标有状态连接的标识,则首先根据数据库请求类型确定命令原语接口,具体方式与步骤220相同,这里不再赘述,然后,将数据库请求的解析结果作为命令原语参数,并由命令原语接口和命令原语参数共同构成命令原语。进一步的,会话处理线程根据元数据库中存储的数据描述信息,确定当前数据库请求涉及的至少一个目标子数据库,从而将至少一个目标子数据库对应的连接管理器作为目标连接管理器。
[0097]
步骤240、获取当前存储的目标有状态连接的至少一个标志位状态;目标有状态连接为当前会话针对目标子数据库的有状态连接。
[0098]
本实施例中,会话处理线程在确定数据库请求中针对目标连接管理器的命令原语后,进一步获取当会话处理线程中存储的目标有状态连接的至少一个标志位状态,以根据标志位状态确定是否向目标连接管理器发送命令原语,其中,目标有状态连接是目标连接管理器管理的至少一个指向目标子数据库的有状态连接中,针对当前会话的有状态连接。示例性的,目标连接管理器中包括了10个面向目标子数据库的有状态连接,将这10个连接中与当前会话对应的有状态连接作为目标有状态连接。
[0099]
步骤250、根据当前会话的各标志位状态与目标有状态连接的各标志位状态之间的关联关系,以及数据库请求的类型,确定是否满足命令原语发送条件。
[0100]
本实施例中,当前会话处理线程以当前会话涉及的各子数据库为单位,分别开启一个线程,每个线程根据当前会话的标志位状态与目标有状态连接的各标志位状态之间的关联关系,及数据库请求的类型判断是否满足命令原语的发送条件,具体的判断流程如图2b所示,首先,判断是否满足当前会话的inreserve标志位为真,且目标有状态连接的inreserve标志位为假,若是,则确定满足接口为reserve的命令原语发送条件,然后判断是否满足当前会话的intransaction标志位为真,且目标有状态连接的intransaction标志位
为假,若是,则确定满足接口为begin的命令原语发送条件,进一步的,判断当前数据库请求类型是否为事务结束sql,若是,则确定满足接口为conclude的命令原语发送条件,最终判断当前数据库请求的类型是否为会话级资源获取sql或者其他sql,若是,则确定满足接口为execute的命令原语发送条件。
[0101]
步骤260、当满足命令原语发送条件时,分别向各所述目标连接管理器发送匹配的命令原语。
[0102]
本实施例中,根据步骤250中的判断过程,当满足命令原语发送条件时,向目标连接管理器发送命令原语。示例性的,当满足接口为reserve的命令原语发送条件时,向目标连接管理器发送接口为reserve的命令原语;当满足接口为begin的命令原语发送条件,向目标连接管理器发送接口为begin的命令原语;当满足接口为conclude的命令原语发送条件时,向目标连接管理器发送接口为conclude的命令原语,此时命令原语中包含事务结束的sql(例如,commit或者rollback)形式的参数;当满足接口为execute的命令原语发送条件,向目标连接管理器发送接口为execute的命令原语,此时命令原语中包含具体的业务sql,例如,select*from t1。
[0103]
步骤270、当目标连接管理器根据命令原语对目标有状态连接进行状态调整后,更新当前存储目标有状态连接的标志位状态。
[0104]
本实施例中,当会话处理线程向目标连接管理器发送命令原语,且目标连接管理器根据命令原语对目标有状态连接进行状态调整后,更新当前连接处理线程中存储的目标有状态连接的标志位状态。示例性的,目标连接管理器根据命令原语将目标有状态连接的inreserved标志位更新为真,会话处理线程会将当前存储的目标有状态连接的inreserved标志位状态更新为真,以使会话处理下线程中存储的目标有状态连接的标志位状态与真实的标志位状态保持一致。
[0105]
可选的,当客户端发起关闭会话操作时,会话管理器接收客户端发送的关闭会话指令,遍历当前会话涉及的各目标子数据库对应的各目标有状态连接,获取各目标有状态连接的至少一个标志位状态;
[0106]
向开启事务标志位状态为真的目标有状态连接对应的连接管理器发送用于结束事务的命令原语;
[0107]
向保留连接标志位状态为真的目标有状态连接对应的连接管理器发送用于释放连接的命令原语。
[0108]
本可选的实施例中,提供了一种当客户端发起关闭会话操作时,会话管理器向连接管理器发送命令原语进行连接释放的操作,具体的,会话管理器接收客户端发送的关闭会话的指令,遍历当前会话涉及的各目标子数据库对应的各目标有状态连接,并获取各目标有状态连接的至少一个标志位状态,然后向开启事务标志位(intransaction标志位)状态为真的目标有状态连接对应的连接管理器发送用于结束事务的命令原语,即接口为conclude的命令原语,同时向保留连接标志位(inreserved标志位)状态为真的目标有状态连接对应的连接管理器发送用于释放连接的命令原语,即接口为release的命令原语。
[0109]
本发明实施例的技术方案,会话管理器根据对数据库请求的解析结果以及数据库请求的类型,确定至少一个命令原语,以及与命令原语匹配的目标连接管理器,其中,连接管理器与子数据库关联,连接管理器包括有状态连接池,有状态连接池中的有状态连接为
指向子数据库的连接,如果根据当前会话的至少一个标志位状态以及数据库请求的类型,确定满足命令原语发送条件,则分别向各目标连接管理器发送匹配的命令原语,解决了现有技术中不能基于业务sql灵活管理连接的生命周期的问题,能够在高并发场景下实现节省连接资源的效果。
[0110]
实施例三
[0111]
图3a为本发明实施例三中的一种数据访问控制方法的流程图,本实施例的技术方案适用于通过连接管理器进行到子数据库的连接生命周期的管理的情况,该方法可以由数据访问控制装置执行,该装置可以由软件和/或硬件来实现,并可以集成在各种通用计算机设备中,下面结合图3a对本发明实施例三提供的一种数据访问控制方法进行说明,包括以下步骤:
[0112]
步骤310、接收会话管理器发送的命令原语。
[0113]
连接管理器包括有状态连接池,用于根据会话管理器发送的命令原语进行有状态连接的管理,其中,有状态连接池中包括至少一个指向与当前连接管理器对应子数据的有状态连接,有状态连接池中存储内容的数据结构如下;
[0114]
typedef struct statefulpool{
[0115]
map<conn_id_t,statefulconn*>connmap;
[0116]
vector<conn_id_t>idlelist;
[0117]
}statefulpool;
[0118]
其中,connmap是指有状态连接映射列表,其保存了所有在生命周期中的有状态连接,并保存了有状态连接标识与具体有状态连接对象的关系;idlelist是指空闲连接列表,其中保存了所有处于空闲状态的有状态连接的标识。其中,具体有状态连接对象的数据结构如下:
[0119]
typedef struct statefulconn{
[0120]
conn_id_t connid;
[0121]
dbconn*dbconn;
[0122]
bool intransaction;
[0123]
bool inreserved;
[0124]
}statefulconn;
[0125]
其中,connid是指当前有状态连接的标识,dbconn是指当前有状态连接对应的子数据库,intransaction标志位,用于表示当前有状态连接是否开启事务,inreserved标志位,用于表示当前有状态连接是否需要被保留。
[0126]
本实施例中,连接管理器接收会话管理器发送的命令原语,以根据命令原语执行相应的数据库访问操作,并进行有状态连接的生命周期的管理,即根据当前会话的标志位状态,进行有状态连接的标志位状态更新。
[0127]
步骤320、根据命令原语,在有状态连接池中获取目标有状态连接,并对目标有状态连接进行状态调整,和/或,使用目标有状态连接对匹配的子数据库进行数据访问。
[0128]
本实施例中,连接管理器接收到会话管理器发送的命令原语后,首先从有状态连接池中获取目标有状态连接,然后根据命令原语,对目标有状态连接进行状态调整,和/或使用目标有状态连接对匹配的子数据库进行数据访问。
[0129]
具体的,连接管理器为了实现命令原语的执行流程,首先要调用获取目标有状态连接子函数,从有状态连接池中获取目标有状态连接,具体获取方式如图3b所示,连接管理器首先判断会话管理器发送的命令原语中是否包含了有状态连接的标识,当命令原语中包含有状态连接的标识时,直接从有状态连接映射表中获取有状态连接对象(有状态连接对象的数据结构如步骤310中描述的statefulconn数据结构,包括有状态连接的标识,有状态连接对应的子数据库,以及至少一个有状态连接的标志位状态),然后向会话管理器返回该有状态连接对象;当命令原语中不包含有状态连接的标识时,连接管理器则会判断空闲连接列表中是否包含至少一个有状态连接标识,若是,则从空闲连接列表中随机选择一个有状态连接标识,并根据该有状态连接标识从有状态连接映射列表中获取有状态连接对象,同时将该有状态连接标识从空闲连接列表中删除,若否,则创建一个新的数据库连接,并用一个新的有状态连接对象包裹,然后以数据库返回的连接号作为新建的有状态连接的标识,最终将新建的有状态连接对象放入有状态连接列表中,并向会话管理器返回有状态连接对象。
[0130]
在获取到有状态连接对象后,连接管理器开启的各连接处理线程会分别根据会话管理线程发送的命令原语,对目标有状态连接进行状态调整,和/或使用目标有状态连接对匹配的子数据库进行数据访问。
[0131]
其中,连接处理线执行命令原语接口为begin的命令原语时,执行流程如图3c所示,首先调用获取目标有状态连接的子函数,获取目标有状态连接,然后通过目标有状态连接中的数据库连接执行start transaction命令,并将目标有状态连接的intransaction标志位标记为真。
[0132]
连接处理线程执行命令原语接口为reserved的命令原语时,执行流程如图3d所示,首先调用获取目标有状态连接的子函数,获取目标有状态连接,然后,将目标有状态连接的inreserved标志位标记为真。
[0133]
连接处理线程执行命令原语接口为execute的命令原语时,执行流程如图3e所示,首先调用获取目标有状态连接的子函数,获取目标有状态连接,然后通过目标有状态连接中的数据库连接执行命令原语中包含的具体业务sql。
[0134]
连接处理线程执行命令原语接口为conclude的命令原语时,执行流程如图3f所示,首先调用获取目标有状态连接的子函数,获取目标有状态连接,然后通过目标有状态连接中的数据库连接执行命令原语中包含的具体业务sql,进一步的,将目标有状态连接的intransaction标志位标记为假,并判断inreserved标志位是否为真,若是,则将目标有状态连接的标识放入空闲连接列表,若否,则结束。
[0135]
连接处理线程执行命令原语接口为release的命令原语时,执行流程如图3g所示,首先调用获取目标有状态连接的子函数,获取目标有状态连接,然后断开目标有状态连接中的数据库连接,进一步的,将目标有状态连接的从有状态连接映射列表中删除。
[0136]
本发明实施例的技术方案,连接管理器首先接收会话管理器发送的命令原语,然后根据命令原语,在有状态连接池中获取目标有状态连接,并对目标有状态连接进行状态调整,和/或,使用目标有状态连接对匹配的子数据库进行数据访问,解决了现有技术中不能基于业务sql灵活管理连接的生命周期的问题,能够在高并发场景下实现节省连接资源的效果。
[0137]
实施例四
[0138]
图4为本发明实施例四中的一种数据访问控制系统的结构示意图,下面结合图4对本发明实施例四提供的一种数据访问控制系统进行说明:
[0139]
数据访问控制系统包括至少两个子数据库1、与各子数据库1分别对应的连接管理器2,以及至少一个会话管理器3;各子数据库1与其对应的连接管理器2通信连接,各会话管理器3与各连接管理器2通信连接;所述连接管理器2包括有状态连接池21,所述有状态连接池21中的有状态连接为指向子数据库的连接;
[0140]
本实施例中,数据访问控制系统包括至少两个子数据库1,每个子数据库1配置一个对应的连接管理器2,以及至少一个会话管理器3,其中,连接管理器2用于管理指向与其对应的子数据库1的有状态连接的生命周期,具体的,连接管理器中包括有状态连接池21,有状态连接池21中存储有指向与当前连接管理器对应的子数据库的有状态连接;会话管理器3可以在不同机器上部署多个,客户终端可以通过数据库连接协议连接到任意一个会话管理器3,即建立会话,客户端可以向会话管理器3发送数据库请求,会话管理器3用于管理客户端建立会话的状态,并将用户发送的数据库请求以子数据库为单位进行拆分,并根据拆分后的各子请求生成命令原语分别发送给至少一个连接管理器2,以指示连接管理器2根据命令原语在有状态连接池中获取目标有状态连接进行状态调整,和/或,使用目标有状态连接对匹配的子数据库1进行数据访问。
[0141]
其中,所述会话管理器3,用于根据对数据库请求的解析结果以及所述数据库请求的类型,确定至少一个命令原语,以及与命令原语匹配的目标连接管理器2,如果根据当前会话的至少一个标志位状态以及数据库请求的类型,确定满足命令原语发送条件,则分别向各所述目标连接管理器2发送匹配的命令原语。
[0142]
本实施例中,会话管理器3具体用于,对客户端发送的数据库请求进行解析,并根据对数据库请求的解析结果和数据库请求的类型,确定至少一个命令原语,另外,还根据解析结果和元数据库中存储的数据描述信息,确定当前数据库请求涉及的至少一个子数据库1,从而确定与当前命令原语匹配子数据库1对应的连接管理器2为目标连接管理器。其中,元数据库中存储的数据描述信息包括数据在各子数据库1中的存储分布信息,例如,表t1在子数据库a和子数据库b中有分区,则在对数据库请求进行解析,确定需要查询表t1时,可以根据元数据库中存储的数据描述信息,确定当前数据库请求涉及的子数据库包括子数据库a和子数据库b。
[0143]
进一步的,会话管理器3根据当前会话的至少一个标志位状态以及数据库请求的类型,确定当前生成的命令原语是否满足发送条件,若是,则分别向各目标连接管理器2发送匹配的命令原语。
[0144]
所述连接管理器2,用于接收会话管理器3发送的命令原语,并根据所述命令原语,在有状态连接池21中获取目标有状态连接,并对所述目标有状态连接进行状态调整,和/或,使用目标有状态连接对匹配的子数据库1进行数据访问。
[0145]
本实施例中,连接管理器2具体用于,根据会话管理器3中运行的至少一个会话处理线程发送的命令原语,运行至少一个连接处理线程,根据命令原语,在有状态连接池21中获取与当前会话匹配的目标有状态连接,并对目标有状态连接进行状态调整,和/或,使用目标有状态连接对匹配的子数据库1进行数据访问。
[0146]
本发明实施例的技术方案,会话管理器根据对数据库请求的解析结果以及数据库请求的类型,确定至少一个命令原语,以及与命令原语匹配的目标连接管理器,其中,连接管理器与子数据库关联,连接管理器包括有状态连接池,有状态连接池中的有状态连接为指向子数据库的连接,如果根据当前会话的至少一个标志位状态以及数据库请求的类型,确定满足命令原语发送条件,则分别向各目标连接管理器发送匹配的命令原语,解决了现有技术中不能基于业务sql灵活管理连接的生命周期的问题,能够在高并发场景下实现节省连接资源的效果。
[0147]
实施例五
[0148]
图5为本发明实施例五提供的一种数据访问控制装置的结构示意图,该数据访问控制装置,包括:命令原语确定模块510和命令原语发送模块520。
[0149]
命令原语确定模块510,用于根据对数据库请求的解析结果以及所述数据库请求的类型,确定至少一个命令原语,以及与命令原语匹配的目标连接管理器;
[0150]
其中,连接管理器与子数据库关联,连接管理器包括有状态连接池,所述有状态连接池中的有状态连接为指向子数据库的连接;
[0151]
命令原语发送模块520,用于如果根据当前会话的至少一个标志位状态以及数据库请求的类型,确定满足命令原语发送条件,则分别向各所述目标连接管理器发送匹配的命令原语;
[0152]
其中,命令原语用于指示连接管理器在有状态连接池中获取目标有状态连接进行状态调整,和/或,使用目标有状态连接对匹配的子数据库进行数据访问。
[0153]
本发明实施例的技术方案,会话管理器根据对数据库请求的解析结果以及数据库请求的类型,确定至少一个命令原语,以及与命令原语匹配的目标连接管理器,其中,连接管理器与子数据库关联,连接管理器包括有状态连接池,有状态连接池中的有状态连接为指向子数据库的连接,如果根据当前会话的至少一个标志位状态以及数据库请求的类型,确定满足命令原语发送条件,则分别向各目标连接管理器发送匹配的命令原语,解决了现有技术中不能基于业务sql灵活管理连接的生命周期的问题,能够在高并发场景下实现节省连接资源的效果。
[0154]
可选的,数据访问控制装置,还包括:
[0155]
会话标志位更新模块,用于在根据对数据库请求的解析结果以及所述数据库请求的类型,确定至少一个命令原语,以及与命令原语匹配的目标连接管理器之前,当客户端的数据库请求的类型满足会话状态更新条件,则根据数据库请求的类型,更新当前会话的至少一个标志位状态。
[0156]
可选的,命令原语发送模块520,包括:
[0157]
连接标志位获取单元,用于获取当前存储的目标有状态连接的至少一个标志位状态;所述目标有状态连接为当前会话针对目标子数据库的有状态连接;
[0158]
发送条件判断单元,用于根据所述当前会话的各标志位状态与所述目标有状态连接的各标志位状态之间的关联关系,以及数据库请求的类型,确定是否满足命令原语发送条件。
[0159]
可选的,命令原语确定模块510,包括:
[0160]
第一命令原语构建单元,用于如果当前存储有目标有状态连接的标识,则根据数
据库请求的类型确定命令原语接口,并将数据库请求的解析结果和目标有状态连接的标识作为命令原语的参数,由所述命令原语接口和命令原语的参数共同构成所述命令原语,最终根据所述解析结果,确定与命令原语匹配的目标连接管理器;
[0161]
第二命令原语构建单元,用于如果当前未存储目标有状态连接的标识,则根据数据库请求的类型确定命令原语接口,并将数据库请求的解析结果作为命令原语的参数,由所述命令原语接口和命令原语的参数共同构成所述命令原语,最终根据所述解析结果,确定与命令原语匹配的目标连接管理器。
[0162]
可选的,数据访问控制装置,还包括:
[0163]
连接标志位更新模块,用于当所述目标连接管理器根据所述命令原语对目标有状态连接进行状态调整后,更新当前存储目标有状态连接的标志位状态。
[0164]
可选的,数据访问控制装置,还包括:
[0165]
连接标志位获取模块,用于接收客户端发送的关闭会话指令,遍历当前会话涉及的各目标子数据库对应的各目标有状态连接,获取各目标有状态连接的至少一个标志位状态;
[0166]
结束原语发送模块,用于向开启事务标志位状态为真的目标有状态连接对应的连接管理器发送用于结束事务的命令原语;
[0167]
释放原语发送模块,用于向保留连接标志位状态为真的目标有状态连接对应的连接管理器发送用于释放连接的命令原语。
[0168]
本发明实施例所提供的数据访问控制装置可执行本发明任意实施例所提供的数据访问控制方法,具备执行方法相应的功能模块和有益效果。
[0169]
实施例六
[0170]
图6为本发明实施例六提供的一种数据访问控制装置的结构示意图,该数据访问控制装置,包括:命令原语接收模块610和命令原语执行模块620。
[0171]
命令原语接收模块610,用于接收会话管理器发送的命令原语;
[0172]
命令原语执行模块620,用于根据所述命令原语,在有状态连接池中获取目标有状态连接,并对所述目标有状态连接进行状态调整,和/或,使用目标有状态连接对匹配的子数据库进行数据访问。
[0173]
本发明实施例的技术方案,连接管理器首先接收会话管理器发送的命令原语,然后根据命令原语,在有状态连接池中获取目标有状态连接,并对目标有状态连接进行状态调整,和/或,使用目标有状态连接对匹配的子数据库进行数据访问,解决了现有技术中不能基于业务sql灵活管理连接的生命周期的问题,能够在高并发场景下实现节省连接资源的效果。
[0174]
可选的,命令原语执行模块620,包括:
[0175]
连接获取单元,用于当所述命令原语中包含目标有状态连接的标识时,根据所述目标有状态连接标识,在所述有状态连接池中获取所述目标有状态连接;
[0176]
列表查询单元,用于当所述命令原语中不包含目标有状态连接的标识时,查询空闲连接列表;
[0177]
连接选取单元,用于当所述空闲连接列表中存在至少一个有状态连接标识时,随机选取一个有状态连接标识,并根据所述有状态连接标识在有状态连接池中获取一个有状
态连接,作为目标有状态连接;
[0178]
连接创建单元,用于当所述空闲连接列表中不存在有状态连接标识时,创建新的有状态连接,作为目标有状态连接。
[0179]
本发明实施例所提供的数据访问控制装置可执行本发明任意实施例所提供的数据访问控制方法,具备执行方法相应的功能模块和有益效果。
[0180]
实施例七
[0181]
图7为本发明实施例七提供的一种计算机设备的结构示意图,如图7所示,该设备包括处理器70、存储器71、输入装置72和输出装置73;设备中处理器70的数量可以是一个或多个,图7中以一个处理器70为例;设备中的处理器70、存储器71、输入装置72和输出装置73可以通过总线或其他方式连接,图7中以通过总线连接为例。
[0182]
存储器71作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的数据访问控制方法对应的程序指令/模块(例如,数据访问控制装置中的命令原语确定模块510和命令原语发送模块520,或者,命令原语接收模块610和命令原语执行模块620)。处理器70通过运行存储在存储器71中的软件程序、指令以及模块,从而执行设备的各种功能应用以及数据处理,即实现上述的任务方法。
[0183]
存储器71可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器71可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器71可进一步包括相对于处理器70远程设置的存储器,这些远程存储器可以通过网络连接至设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
[0184]
处理器70通过运行存储在存储器71中的指令,从而执行各种功能应用以及数据处理,例如执行以下操作:根据对数据库请求的解析结果以及所述数据库请求的类型,确定至少一个命令原语,以及与命令原语匹配的目标连接管理器;其中,连接管理器与子数据库关联,连接管理器包括有状态连接池,所述有状态连接池中的有状态连接为指向子数据库的连接;如果根据当前会话的至少一个标志位状态以及数据库请求的类型,确定满足命令原语发送条件,则分别向各所述目标连接管理器发送匹配的命令原语;其中,命令原语用于指示连接管理器在有状态连接池中获取目标有状态连接进行状态调整,和/或,使用目标有状态连接对匹配的子数据库进行数据访问。
[0185]
在上述各实施例的基础上,处理器70是设置为通过以下方式更新当前会话的标志位状态:当客户端的数据库请求的类型满足会话状态更新条件,则根据数据库请求的类型,更新当前会话的至少一个标志位状态。
[0186]
在上述各实施例的基础上,处理器70是设置为通过以下方式确定满足命令原语发送条件:获取当前存储的目标有状态连接的至少一个标志位状态;所述目标有状态连接为当前会话针对目标子数据库的有状态连接;根据所述当前会话的各标志位状态与所述目标有状态连接的各标志位状态之间的关联关系,以及数据库请求的类型,确定是否满足命令原语发送条件。
[0187]
在上述各实施例的基础上,处理器70是设置为通过以下方式确定命令原语:如果当前存储有目标有状态连接的标识,则根据数据库请求的类型确定命令原语接口,并将数
据库请求的解析结果和目标有状态连接的标识作为命令原语的参数,并由所述命令原语接口和命令原语的参数共同构成所述命令原语,最终根据所述解析结果,确定与命令原语匹配的目标连接管理器;如果当前未存储目标有状态连接的标识,则根据数据库请求的类型确定命令原语接口,并将数据库请求的解析结果作为命令原语的参数,并由所述命令原语接口和命令原语的参数共同构成所述命令原语,最终根据所述解析结果,确定与命令原语匹配的目标连接管理器。
[0188]
在上述各实施例的基础上,处理器70是设置为通过以下方式更新当前存储目标有状态连接的标志位状态:当所述目标连接管理器根据所述命令原语对目标有状态连接进行状态调整后,更新当前存储目标有状态连接的标志位状态。
[0189]
在上述各实施例的基础上,处理器70是设置为通过以下方式对连接标志位状态进行复位:接收客户端发送的关闭会话指令,遍历当前会话涉及的各目标子数据库对应的各目标有状态连接,获取各目标有状态连接的至少一个标志位状态;向开启事务标志位状态为真的目标有状态连接对应的连接管理器发送用于结束事务的命令原语;向保留连接标志位状态为真的目标有状态连接对应的连接管理器发送用于释放连接的命令原语。
[0190]
处理器70通过运行存储在存储器71中的指令,从而执行各种功能应用以及数据处理,例如还可以执行以下操作:接收会话管理器发送的命令原语;根据所述命令原语,在有状态连接池中获取目标有状态连接,并对所述目标有状态连接进行状态调整,和/或,使用目标有状态连接对匹配的子数据库进行数据访问。
[0191]
在上述各实施例的基础上,处理器70是设置为通过以下方式获取目标有状态连接:当所述命令原语中包含目标有状态连接的标识时,根据所述目标有状态连接标识,在所述有状态连接池中获取所述目标有状态连接;当所述命令原语中不包含目标有状态连接的标识时,查询空闲连接列表;当所述空闲连接列表中存在至少一个有状态连接标识时,随机选取一个有状态连接标识,并根据所述有状态连接标识在有状态连接池中获取一个有状态连接,作为目标有状态连接;当所述空闲连接列表中不存在有状态连接标识时,创建新的有状态连接,作为目标有状态连接。
[0192]
实施例八
[0193]
本发明实施例八还提供一种存储计算机程序的计算机存储介质,所述计算机程序在由计算机处理器执行时用于执行本发明上述实施例任一所述的数据访问控制方法。
[0194]
本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(read only memory,rom)、可擦式可编程只读存储器((erasable programmable read only memory,eprom)或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
[0195]
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,
其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
[0196]
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于无线、电线、光缆、射频(radio frequency,rf)等等,或者上述的任意合适的组合。
[0197]
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如java、smalltalk、c++,还包括常规的过程式程序设计语言——诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
[0198]
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1