(12)发明专利申请
(10)申请公布号 CN 106599711 A (43)申请公布日 2017.04.26
(21)申请号 201510674076.7(22)申请日 2015.10.15
(71)申请人华为技术有限公司
地址518129 广东省深圳市龙岗区坂田华为
总部办公楼(72)发明人房厚波
(74)专利代理机构深圳市深佳知识产权代理事
务所(普通合伙) 44285
代理人王仲凯(51)Int.Cl.
G06F 21/62(2013.01)G06F 17/30(2006.01)
权利要求书3页 说明书23页 附图8页
(54)发明名称
一种数据库访问控制方法,及装置(57)摘要
一种数据库访问控制方法,及装置,其中方法应用于数据库系统,所述数据库系统存在至少两个数据库,所述至少两个数据库中包含第一数据库和第二数据库;应用与第一数据库之间建立有数据库连接,包括:数据访问层接收来自所述应用的访问请求,确定所述访问请求发往的目标数据库为第二数据库;所述数据访问层建立连接代理与所述第二数据库之间的数据库连接,通过所述连接代理将所述访问请求发往所述第二数据库;所述数据访问层确定所述访问请求发往的目标数据库为第一数据库;所述数据访问层将所述访问请求通过所述应用与所述第一数据库之间的数据库连接发往所述第一数据库。可以用于实现数据库应用的线性扩展,并节省数据库连接资源。 C N 1 0 6 5 9 9 7 1 1 A CN 106599711 A
权 利 要 求 书
1/3页
1.一种数据库访问控制方法,应用于数据库系统,所述数据库系统存在至少两个数据库,所述至少两个数据库中包含第一数据库和第二数据库;应用与第一数据库之间建立有数据库连接,其特征在于,包括:
数据访问层接收来自所述应用的访问请求,确定所述访问请求发往的目标数据库为第二数据库;所述数据访问层建立连接代理与所述第二数据库之间的数据库连接,通过所述连接代理将所述访问请求发往所述第二数据库;
所述数据访问层确定所述访问请求发往的目标数据库为第一数据库;所述数据访问层将所述访问请求通过所述应用与所述第一数据库之间的数据库连接发往所述第一数据库。
2.根据权利要求1所述方法,其特征在于,所述应用与第一数据库之间建立有数据库连接,包括:
确定所述访问请求的访问速度需求,若所述访问速度需求属于高速直连类,则建立所述应用与第一数据库之间的数据库连接;或者,
所述应用的主库为第一数据库,所述应用与第一数据库之间的数据库连接为预配置的数据库连接。
3.根据权利要求2所述方法,其特征在于,所述建立所述应用与第一数据库之间的数据库连接之前,所述方法还包括:
确定当前不存在所述应用与第一数据库之间的数据库连接,并且所述第一数据库未达到最大连接数,则建立所述应用与第一数据库之间的数据库连接。
4.根据权利要求1至3任意一项所述方法,其特征在于,在所述数据访问层建立连接代理与所述第二数据库之间的数据库连接之前,所述方法还包括:
确定所述第二数据库的连接数是否小于第二阈值,并且所述应用对所述第二数据库的访问量或者频率是否大于第三阈值,若是则建立所述应用与第二数据库之间的数据库连接;否则执行所述建立连接代理与所述第二数据库之间的数据库连接。
5.根据权利要求4所述方法,其特征在于,在建立所述应用与第二数据库之间的数据库连接之后,所述方法还包括:
确定所述第二数据库的连接数是否大于第四阈值,并且所述应用对所述第二数据库的访问量或者频率是否小于第五阈值,所述第四阈值大于或等于所述第二阈值,所述第五阈值小于或等于所述第三阈值;若是,则拆除所述应用与第二数据库之间的数据库连接,建立连接代理与所述第二数据库之间的数据库连接。
6.根据权利要求1至3任意一项所述方法,其特征在于,所述数据访问层建立连接代理与所述第二数据库之间的数据库连接之前,所述方法还包括:
所述数据访问层获取当前存在的连接代理的工作状态,确定目标连接代理;所述目标连接代理为当前工作状态为空闲的连接代理;
建立所述应用与所述目标连接代理之间的通信连接,或者,若无空闲的连接代理并且所述第二数据库已建立的连接数未超过所述第二数据库支持的最大连接数,则建立新的连接代理作为目标连接代理;
所述数据访问层建立连接代理与所述第二数据库之间的数据库连接,通过所述连接代理将所述访问请求发往所述第二数据库,包括:建立所述目标连接代理与所述第二数据库之间的数据库连接,所述目标连接代理将所述访问请求发往所述第二数据库。
2
CN 106599711 A
权 利 要 求 书
2/3页
7.根据权利要求6所述方法,其特征在于,还包括:
记录当前已有的连接代理,并记录连接代理上报的当前工作状态;在连接代理的当前工作状态空闲量大于第一阈值时,删除冗余连接代理;所述冗余连接代理依据各数据库的连接数均衡原则确定。
8.根据权利要求1至3任意一项所述方法,其特征在于,还包括:接收对应于所述访问请求的结果数据,若所述结果数据的源端与所述应用之间存在数据库连接,则将所述结果数据路由发往所述应用;否则,则将所述结果数据通过所述连接代理发往所述应用。
9.一种数据库访问控制装置,应用于数据库系统,所述数据库系统存在至少两个数据库,所述至少两个数据库中包含第一数据库和第二数据库;应用与第一数据库之间建立有数据库连接,其特征在于,包括:
接收单元,用于接收来自所述应用的访问请求;数据库确定单元,用于确定所述访问请求发往的目标数据库为第二数据库;连接建立单元,用于建立连接代理与所述第二数据库之间的数据库连接;请求发送单元,用于通过所述连接代理将所述访问请求发往所述第二数据库;所述数据库确定单元,还用于确定所述访问请求发往的目标数据库为第一数据库;所述请求发送单元,用于将所述访问请求通过所述应用与所述第一数据库之间的数据库连接发往所述第一数据库。
10.根据权利要求9所述装置,其特征在于,所述装置还包括:需求确定单元,用于确定所述访问请求的访问速度需求;所述连接建立单元,还用于若所述访问速度需求属于高速直连类,则建立所述应用与第一数据库之间的数据库连接;
或者,所述应用的主库为第一数据库,所述应用与第一数据库之间的数据库连接为预配置的数据库连接。
11.根据权利要求10所述装置,其特征在于,所述连接建立单元,还用于在建立所述应用与第一数据库之间的数据库连接之前,确定当前不存在所述应用与第一数据库之间的数据库连接,并且所述第一数据库未达到最大连接数,则建立所述应用与第一数据库之间的数据库连接。
12.根据权利要求9至11任意一项所述装置,其特征在于,所述装置还包括:确认单元,用于在建立连接代理与所述第二数据库之间的数据库连接之前,确定所述第二数据库的连接数是否小于第二阈值,并且所述应用对所述第二数据库的访问量或者频率是否大于第三阈值;
所述连接建立单元,用于若所述确认单元确定结果为是则建立所述应用与第二数据库之间的数据库连接;否则执行所述建立连接代理与所述第二数据库之间的数据库连接。
13.根据权利要求12所述装置,其特征在于,所述确认单元,还用于在建立所述应用与第二数据库之间的数据库连接之后,确定所述第二数据库的连接数是否大于第四阈值,并且所述应用对所述第二数据库的访问量或者频率是否小于第五阈值,所述第四阈值大于或等于所述第二阈值,所述第五阈值小于或等于所述第三阈值;
3
CN 106599711 A
权 利 要 求 书
3/3页
所述连接建立单元,用于若所述确认单元确定结果为是则拆除所述应用与第二数据库之间的数据库连接,建立连接代理与所述第二数据库之间的数据库连接。
14.根据权利要求9至11任意一项所述装置,其特征在于,所述装置还包括:状态获取单元,用于在建立连接代理与所述第二数据库之间的数据库连接之前,获取当前存在的连接代理的工作状态;
代理确定单元,用于确定目标连接代理;所述目标连接代理为当前工作状态为空闲的连接代理;
所述连接建立单元,用于建立所述应用与所述目标连接代理之间的通信连接,或者,若无空闲的连接代理并且所述第二数据库已建立的连接数未超过所述第二数据库支持的最大连接数,则建立新的连接代理作为目标连接代理;建立所述目标连接代理与所述第二数据库之间的数据库连接;
所述请求发送单元,用于通过所述目标连接代理将所述访问请求发往所述第二数据库。
15.根据权利要求14所述装置,其特征在于,所述装置还包括:状态记录单元,用于记录当前已有的连接代理,并记录连接代理上报的当前工作状态;
连接更新单元,用于在连接代理的当前工作状态空闲量大于第一阈值时,删除冗余连接代理;所述冗余连接代理依据各数据库的连接数均衡原则确定。
16.根据权利要求9至11任意一项所述装置,其特征在于,所述装置还包括:数据接收单元,用于接收对应于所述访问请求的结果数据;数据发送单元,还用于若所述结果数据的源端与所述应用之间存在数据库连接,则将所述结果数据路由发往所述应用;否则,则将所述结果数据通过所述连接代理发往所述应用。
4
CN 106599711 A
说 明 书
一种数据库访问控制方法,及装置
1/23页
技术领域
[0001]
本发明涉及计算机技术领域,特别涉及一种数据库访问控制方法,及装置。
背景技术
面向互联网海量高并发服务的系统架构,主要有几个核心的关注点:性能、可用性、伸缩性、可扩展性。为了达到以上各关注点的系统设计目标,在数据层通常会引入多种数据库技术,如内存库数据库、关系数据库、非结构化查询语言(Not Only Structured Query Language,NOSQL)等等。NOSQL泛指非关系型的数据库,内存库产品如oracle出品的TT(TimesTen)。
[0003] 各种数据库为了保证自身的安全和性能指标,通常对单节点设置指标上限。如:数据库连接数的上限,TimesTen最多支持2048个连接,Oracle(一种关系数据库)数据库则可以支持的连接数较多;但是数据库连接数增多会导致Oracle数据库响应变慢,因此在保证性能的前提下Oracle数据库也存在数据库连接数瓶颈。[0004] 随着业务的复杂化、多样化的发展,结合数据库分布式部署(scale out)的发展,应用与数据库关系表现为如下特征:[0005] 1、多种类型的数据库并存,关系数据库,内存数据库,NOSQL等;典型产品如Oracle,TimesTen,Fastore,Hadoop等等。[0006] 2、为了适应应用的集群化和高可行性,数据库一般通过分区拆分的方式部署在多个分区节点,提供高并发和高可用的能力;[0007] 3、由于应用日益复杂,一项应用可能需要同时访问多种数据库和多个分区节点来获取信息。
[0008] 面对海量增长的数据和业务请求,大型应用系统的数据库架构如下:[0009] 数据库架构中包含多个数据库,应用所需要的数据以分区拆分的方式存放在上述多个数据库中;应用分别与上述多个数据库建立有数据库连接。需要扩展时候,纵向扩展应用数量和数据库数量,数据库连接的总数是应用数 量与数据库数量的乘积,单个数据库的数据库连接数等于应用数,单个应用的数据库连接数等于数据库数量。[0010] 在以上数据库架构下,每个数据库连接数等于需要对其访问的应用数(或者进程数);因为数据库连接数受限,应用无法线性扩展;应用占用每个数据库一个专用数据库连接,造成数据库连接资源浪费。
[0002]
发明内容
本发明实施例提供了一种数据库访问控制方法,及装置,用于实现数据库应用的线性扩展,并节省数据库连接资源。
[0011] [0012]
一方面,本申请的实施例提供了一种数据库访问控制方法,应用于数据库系统,所述数据库系统存在至少两个数据库,所述至少两个数据库中包含第一数据库和第二数据库;应用与第一数据库之间建立有数据库连接;
5
CN 106599711 A[0013]
说 明 书
2/23页
数据访问层接收来自所述应用的访问请求,确定所述访问请求发往的目标数据库为第二数据库;所述数据访问层建立连接代理与所述第二数据库之间的数据库连接,通过所述连接代理将所述访问请求发往所述第二数据库;
[0014] 所述数据访问层确定所述访问请求发往的目标数据库为第一数据库;所述数据访问层将所述访问请求通过所述应用与所述第一数据库之间的数据库连接发往所述第一数据库。
[0015] 以上访问请求仅需要具备确定其目标数据库的作用就可以了,不应做更多限定性的理解;第一数据库的连接不需要经连接代理中转属于高速直连的高速连接,第二数据库的连接需要经连接代理中转属于低速连接;[0016] 在一个可能的设计中,高速直连的数据库连接,可以是预先配置的也可以是由数据访问层集中管理的,其中采用数据访问层直接管理的方式可以更方便于后期对高速直连的数据库连接进行增加和删除管理,预配置的方案则在应用对数据库具有较为固定的高速访问需求的应用场景下使用,会使整个数据库系统架构管理更为简洁,具体为:所述应用与第一数据库之间建立有数据库连接,包括:[0017] 确定所述访问请求的访问速度需求,若所述访问速度需求属于高速直连类,则建立所述应用与第一数据库之间的数据库连接;或者,[0018] 所述应用的主库为第一数据库,所述应用与第一数据库之间的数据库连接为预配置的数据库连接。
[0019] 在一个可能的设计中,还提供了由数据访问层集中管理高速直连的数据库连接方案下,如何建立高速直连的方案,如下:所述建立所述应用与第一数据库之间的数据库连接之前,所述方法还包括:
[0020] 确定当前不存在所述应用与第一数据库之间的数据库连接,并且所述第一数据库未达到最大连接数,则建立所述应用与第一数据库之间的数据库连接。如果已经存在所述应用与第一数据库之间的数据库连接,那么不需要创建新的高速直连;如果第一数据库已经达到了其支持的最大连接数,那么则无法建立高速直连。[0021] 在一个可能的设计中,还提供了采用连接代理实现的低速数据库访问,向采用高速直连的高速数据库访问切换,如下:在所述数据访问层建立连接代理与所述第二数据库之间的数据库连接之前,所述方法还包括:
[0022] 确定所述第二数据库的连接数是否小于第二阈值,并且所述应用对所述第二数据库的访问量或者频率是否大于第三阈值,若是则建立所述应用与第二数据库之间的数据库连接;否则执行所述建立连接代理与所述第二数据库之间的数据库连接。本实施例提供的是:在数据库负荷较低,并且应用对数据库的访问较多的情况下,可以考虑为应用提供更快速的访问通道,第二阈值和第三阈值用于控制从连接代理向高速直连切换的临界点,阈值的具体设定将会导致的效果是可以进行理论推导获得了,阈值的具体取值可以依经验设定,也可以依系统的负载能力来确定。[0023] 在一个可能的设计中,在建立所述应用与第二数据库之间的数据库连接之后,所述方法还包括:
确定所述第二数据库的连接数是否大于第四阈值,并且所述应用对所述第二数据
库的访问量或者频率是否小于第五阈值,所述第四阈值大于或等于所述第二阈值,所述第
[0024]
6
CN 106599711 A
说 明 书
3/23页
五阈值小于或等于所述第三阈值;若是,则拆除所述应用与第二数据库之间的数据库连接,建立连接代理与所述第二数据库之间的数据库连接。第四阈值和第五阈值的具体取值可以依经验设定,也可以依系统的负载能力来确定,本实施例对其具体取值不作唯一性限定。[0025] 在一个可能的设计中,所述数据访问层建立连接代理与所述第二数据库之间的数据库连接之前,所述方法还包括:
[0026] 所述数据访问层获取当前存在的连接代理的工作状态,确定目标连接代理;所述目标连接代理为当前工作状态为空闲的连接代理;
[0027] 建立所述应用与所述目标连接代理之间的通信连接,或者,若无空闲的连接代理并且所述第二数据库已建立的连接数未超过所述第二数据库支持的最大连接数,则建立新的连接代理作为目标连接代理;
[0028] 所述数据访问层建立连接代理与所述第二数据库之间的数据库连接,通过所述连接代理将所述访问请求发往所述第二数据库,包括:建立所述目标连接代理与所述第二数据库之间的数据库连接,所述目标连接代理将所述访问请求发往所述第二数据库。在本实施例中,如果没有空闲的连接代理,并且不支持建立新的连接代理,那么可以等待空闲的连接代理出现,直到等待时间超时。[0029] 在一个可能的设计中,所述方法还包括:[0030] 记录当前已有的连接代理,并记录连接代理上报的当前工作状态;[0031] 在连接代理的当前工作状态空闲量大于第一阈值时,删除冗余连接代理;所述冗余连接代理依据各数据库的连接数均衡原则确定。第一阈值的设定可以是一个比例,即空闲的连接代理占总连接代理的比例;第一阈值也可以是个数的数值,例如空闲的连接代理超过多少个,则删除一些连接代理。[0032] 在一个可能的设计中,所述方法还包括:[0033] 接收对应于所述访问请求的结果数据,若所述结果数据的源端与所述应用之间存在数据库连接,则将所述结果数据路由发往所述应用;否则,则将所述结果数据通过所述连接代理发往所述应用。有些访问请求可能并没有结果数据回传,因此并不一定会有结果数据的回传步骤。[0034] 二方面,本申请的实施例提供了一种数据库访问控制装置,应用于数据库系统,所述数据库系统存在至少两个数据库,所述至少两个数据库中包含第一数据库和第二数据库;应用与第一数据库之间建立有数据库连接,所述数据库访问控制装置包括:[0035] 接收单元,用于接收来自所述应用的访问请求;[0036] 数据库确定单元,用于确定所述访问请求发往的目标数据库为第二数据库;[0037] 连接建立单元,用于建立连接代理与所述第二数据库之间的数据库连接;[0038] 请求发送单元,用于通过所述连接代理将所述访问请求发往所述第二数据库;[0039] 所述数据库确定单元,还用于确定所述访问请求发往的目标数据库为第一数据库;
[0040] 所述请求发送单元,用于将所述访问请求通过所述应用与所述第一数据库之间的数据库连接发往所述第一数据库。
以上访问请求仅需要具备确定其目标数据库的作用就可以了,不应做更多限定性
的理解;第一数据库的连接不需要经连接代理中转属于高速直连的高速连接,第二数据库
[0041]
7
CN 106599711 A
说 明 书
4/23页
的连接需要经连接代理中转属于低速连接;[0042] 在一个可能的设计中,高速直连的数据库连接,可以是预先配置的也可以是由数据访问层集中管理的,其中采用数据访问层直接管理的方式可以更方便于后期对高速直连的数据库连接进行增加和删除管理,预配置的方案则在应用对数据库具有较为固定的高速访问需求的应用场景下使用,会使整个数据库系统架构管理更为简洁,具体为:所述装置还包括:
[0043] 需求确定单元,用于确定所述访问请求的访问速度需求;[0044] 所述连接建立单元,还用于若所述访问速度需求属于高速直连类,则建立所述应用与第一数据库之间的数据库连接;[0045] 或者,所述应用的主库为第一数据库,所述应用与第一数据库之间的数据库连接为预配置的数据库连接。
[0046] 在一个可能的设计中,还提供了由数据访问层集中管理高速直连的数据库连接方案下,如何建立高速直连的方案,如下:所述连接建立单元,还用于在建立所述应用与第一数据库之间的数据库连接之前,确定当前不存在所述应用与第一数据库之间的数据库连接,并且所述第一数据库未达到最大连接数,则建立所述应用与第一数据库之间的数据库连接。
[0047] 如果已经存在所述应用与第一数据库之间的数据库连接,那么不需要创建新的高速直连;如果第一数据库已经达到了其支持的最大连接数,那么则 无法建立高速直连。[0048] 在一个可能的设计中,还提供了采用连接代理实现的低速数据库访问,向采用高速直连的高速数据库访问切换,如下:所述装置还包括:[0049] 确认单元,用于在建立连接代理与所述第二数据库之间的数据库连接之前,确定所述第二数据库的连接数是否小于第二阈值,并且所述应用对所述第二数据库的访问量或者频率是否大于第三阈值;[0050] 所述连接建立单元,用于若所述确认单元确定结果为是则建立所述应用与第二数据库之间的数据库连接;否则执行所述建立连接代理与所述第二数据库之间的数据库连接。本实施例提供的是:在数据库负荷较低,并且应用对数据库的访问较多的情况下,可以考虑为应用提供更快速的访问通道,第二阈值和第三阈值用于控制从连接代理向高速直连切换的临界点,阈值的具体设定将会导致的效果是可以进行理论推导获得了,阈值的具体取值可以依经验设定,也可以依系统的负载能力来确定。[0051] 在一个可能的设计中,所述确认单元,还用于在建立所述应用与第二数据库之间的数据库连接之后,确定所述第二数据库的连接数是否大于第四阈值,并且所述应用对所述第二数据库的访问量或者频率是否小于第五阈值,所述第四阈值大于或等于所述第二阈值,所述第五阈值小于或等于所述第三阈值;[0052] 所述连接建立单元,用于若所述确认单元确定结果为是则拆除所述应用与第二数据库之间的数据库连接,建立连接代理与所述第二数据库之间的数据库连接。第四阈值和第五阈值的具体取值可以依经验设定,也可以依系统的负载能力来确定,本实施例对其具体取值不作唯一性限定。
在一个可能的设计中,所述装置还包括:
[0054] 状态获取单元,用于在建立连接代理与所述第二数据库之间的数据库连接之前,
[0053]
8
CN 106599711 A
说 明 书
5/23页
获取当前存在的连接代理的工作状态;[0055] 代理确定单元,用于确定目标连接代理;所述目标连接代理为当前工作状态为空闲的连接代理;
[0056] 所述连接建立单元,用于建立所述应用与所述目标连接代理之间的通信连接,或者,若无空闲的连接代理并且所述第二数据库已建立的连接数未超 过所述第二数据库支持的最大连接数,则建立新的连接代理作为目标连接代理;建立所述目标连接代理与所述第二数据库之间的数据库连接;[0057] 所述请求发送单元,用于通过所述目标连接代理将所述访问请求发往所述第二数据库。在本实施例中,如果没有空闲的连接代理,并且不支持建立新的连接代理,那么可以等待空闲的连接代理出现,直到等待时间超时。[0058] 在一个可能的设计中,所述装置还包括:[0059] 状态记录单元,用于记录当前已有的连接代理,并记录连接代理上报的当前工作状态;
[0060] 连接更新单元,用于在连接代理的当前工作状态空闲量大于第一阈值时,删除冗余连接代理;所述冗余连接代理依据各数据库的连接数均衡原则确定。第一阈值的设定可以是一个比例,即空闲的连接代理占总连接代理的比例;第一阈值也可以是个数的数值,例如空闲的连接代理超过多少个,则删除一些连接代理。[0061] 在一个可能的设计中,所述装置还包括:[0062] 数据接收单元,用于接收对应于所述访问请求的结果数据;[0063] 数据发送单元,还用于若所述结果数据的源端与所述应用之间存在数据库连接,则将所述结果数据路由发往所述应用;否则,则将所述结果数据通过所述连接代理发往所述应用。有些访问请求可能并没有结果数据回传,因此并不一定会有结果数据的回传相关单元。
[0064] 从以上技术方案可以看出,本发明实施例具有以下优点:应用与数据库之间存在两类连接方式:一类是应用与数据库之间的数据库连接,属于高速直连方式;另一类是经连接代理与数据库连接的代理连接方式,属于较低速连接方式。既可以保证高速访问的需求,又可以通过连接代理实现数据库连接的收敛,从而减少数据库连接数量需求,因此可以用于实现数据库应用的线性扩展,并节省数据库连接资源。附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发 明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0066] 图1为本发明实施例数据库架构示意图;[0067] 图2为本发明实施例数据库架构示意图;
[0065]
图3为本发明实施例APP对数据库访问的逻辑示意图;
[0069] 图4为本发明实施例数据库连接代理工作原理的结构示意图;[0070] 图5为本发明实施例数据库连接代理工作原理的结构示意图;
[0068]
9
CN 106599711 A[0071] [0072] [0073] [0074] [0075] [0076] [0077] [0078] [0079] [0080] [0081]
说 明 书
6/23页
图6为本发明实施例方法流程示意图;
图7为本发明实施例方法流程示意图;图8为本发明实施例方法流程示意图;图9为本发明实施例装置结构示意图;图10为本发明实施例装置结构示意图;图11为本发明实施例装置结构示意图;图12为本发明实施例装置结构示意图;图13为本发明实施例装置结构示意图;图14为本发明实施例装置结构示意图;图15为本发明实施例装置结构示意图;图16为本发明实施例服务器结构示意图。
具体实施方式
[0082] 为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部份实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
[0083] 本发明实施例的数据库架构方案详细说明如下:[0084] 如图1所示,为本发明实施例包含应用(Application,APP)在内的数据库架构示意图。在APP和数据库之间增加数据访问层(Data Access Layer,DAL),通过数据访问层(DAL)进行路由及速度服务质量(Quality of Service, Qos)管理和数据库连接收敛;其中速度Qos管理,即为图1中所示的质量管理。数据访问层(DAL)主要包含了路由及速度QoS管理功能和连接收敛代理功能,分别由路由和质量管理的模块和连接代理模块实现。[0085] 在图1中,示意了m个APP、N个路由和质量管理、L个连接代理、以及P个数据库,每个APP都有可能访问任意的一个数据库,在以上数据库架构示意图中,APP与数据库之间存在两种类型的连接方式,一种连接方式是APP经路由和质量管理连接到数据库,这种连接方式速度快是高速直连的连接方式;另一种连接方式是APP经过路由和质量管理,连接到连接代理,再通过连接代理访问数据库,这种连接方式属于通过代理连接数据库的方式,速度较慢。另外,路由和质量管理与连接代理之间虚线示意为应急路径(应急连接),其与通过代理连接数据库类似在此不再赘述。需要说明的是,APP与哪些数据库采用高速直连与那些数据库采用代理连接,不能因为图1作为示意而认为其具有限定作用。[0086] 在以上数据库架构中,同一APP对不同的数据库的访问路径、访问方式可以不同,可以高速直连、也可以走访问代理或应急代理等路径。[0087] 不同APP对同一数据库的访问路径、访问方式可以不同,可以高速直连、也可以走访问代理或应急代理等路径。
[0088] 通过数据访问层(DAL)实现数据库连接收敛、访问速度QoS调度等,达到系统应用速度和开销的平衡。
数据访问层(DAL)的功能与原理介绍如下:
[0090] 数据访问层(DAL)是分布式数据库访问框架发展的产物。数据库系统的一个主要
[0089]
10
CN 106599711 A
说 明 书
7/23页
动机是把一个团体(企业、公司或集团)的操作数据集成起来,从而提供一个集中的数据访问,而系统应用的云化和集群化则是针对集中的想法做相反的努力—分散化,数据访问层(DAL)就是力图把两者协调起来,实现应用对数据的访问透明(屏蔽数据位置/分布/存储等无关性)。关于访问透明具体参见表1的说明如下[0091] 表1
[0092]
[0093]
数据访问层与应用层及数据层的位置关系,介绍如下:
[0095] 图2是本发明实施例的另一数据库架构示意图,相比于图1所示的侧重于连接方式示意而言,该图2更侧重于数据库架构分层示意,并且图2相比于图1还提供了分层中DAL层的可选组件,具体如下:[0096] 应用层:应用层主要包括各种具有特定功能的应用(APP)和服务;如:租费计算、信控、免费资源、提醒、帐务优惠、批量销账等应用和服务;在图2中示意了N的APP。[0097] 数据访问层(DAL):数据访问层统一提供路由管理、事务管理、公共组件,以及数据操纵语言(data manipulation language,DML)语句执行等处理;应用层通过数据服务组件和数据库打交道,从而简化应用的逻辑。在图2中数据库1示意为高速直连,数据库2示意为并存有高速直连和代理连接,其它数据库为代理连接。[0098] 数据层:提供统一的数据存取服务,将内存数据库、物理数据库、NOSQL(关系型的数据库)、缓存等统一纳入数据层,通过数据访问层统一和数据库进行连接管理和数据交互。
[0099] APP对数据库访问的逻辑视图,如图3所示,具体如下:[0100] 应用的逻辑通过通用接口层,例如开源OTL(Oracle,Odbc and DB2-CLI Template Library的缩写,是一个C++编译中操控关系数据库的模板库))适配多个多种异构数据库,做到应用对数据的透明访问,实现应用和数据分离;[0101] 在OTL通用接口层下面对接数据访问层(DAL),实现路由和速度QoS管理和连接收
[0094]
11
CN 106599711 A
说 明 书
8/23页
敛;在图3所示的逻辑图中,路由及速度QoS管理(功能与图 1所示的路由和质量管理相同)根据策略对访问频繁业务量大的内存数据库的节点利用高速直连的连接方式进行高速访问,对于访问频度低的数据库,通过连接代理进行访问;通过连接代理实现数据库连接的复用和收敛。
[0102] 数据库连接代理工作原理,请参阅图4所示,具体如下:[0103] 流程说明:[0104] 1、数据库连接代理有1主进程(或主线程)和多子进程(或子线程)构成,一个子进程(图4所示的读取器(fecher))可以占用一个数据库连接;假如子进程个数是N,应用集群应用(APP)进程个数是M,一般M>N,通过连接复用达到减少数据库连接数的目的。[0105] 2、APP通过套接字(socket,是双向通信连接的一端)将访问请求统一发给连接代理的服务端,由主进程统一接收派发。访问请求在初次连接建立过程中可以是专用于建立连接的连接请求,如图4所示,也可以是访问请求具有连接请求功能。[0106] 3、主进程接收连接请求,如果有空闲的子进程,则将连接派发给空闲的子进程进行处理;如果没有空闲的子进程,则排队等待,直到有空闲子进程可调度或超时。另外,还可以增加新的子进程来及时响应连接请求。子进程在接收到派发的连接任务以后,子进程可以建立与APP的连接以及与数据库的连接。[0107] 4、子进程(图4所示的读取器fecher)负责任务处理及与APP通信,该过程代理从APP到数据库之间的通信。代理完成后,向主进程进行状态上报,注册自己的空闲状态,从而并把APP的套接字标识(socketid)的监管权还给主进程。主进程一侧则可以维护子进程处于空闲状态信息的空闲队列。[0108] 在以上方案中,连接代理可以通过控制子进程数量和数据库连接池的大小,来控制对一个数据库节点的访问量,避免连接数据过过引发的过载问题。[0109] 采用本发明实施例,数据库连接收敛效果分析,如下:[0110] 例如:某项应用集群由8台刀片组成,每台刀片部署70个应用APP,每个数据库的连接数计算如下:
[0111] 如图5所示结构;APP通过OTL分别采用高速直连的连接方式连接到数据库中,在图5所示的数据库有客户资料内存库、账务数据内存库等数据库 类型。
[0112] 数控库连接数=集群刀片数X每个刀片应用进程数 =8×70=560(个数据库连接)
[0113] 本发明实施例:[0114] 数据分区(分节点,即各分布式的数据库)一般按分区键值拆分,[0115] 当应用对数据访问时,对主承载的数据库访问次数较多(假定占总访问量的70%),可以继续采用高速直连方式以获取高速特性;对于其他分区的数据库访问量较小(假定占总访问量的30%),可以通过连接代理复用。
[0116] 总数据库连接数=高速直连数+连接代理占比×连接代理数×安全系统=70(每刀片的进程数)+0.3*(560–70)*1.5 =291(个数据库连接)降低连接数:560–291=269个,
[0118] 在保证速度QoS的前提下,可以降低48%,即:[0119] 可以降低约一半的连接数。
[0117]
12
CN 106599711 A[0120]
说 明 书
9/23页
速度QoS分析,如表2所示:[0121] 表2
[0122]
表2的说明如下:
[0124] 主库独占连接和非主库走DAL连接代理混合模式(假设非主库访问率为:0.3)处理速度计算公式:独占连接速率*访问比重+连接代理速率*访问比重=0.7*1+0.3*0.5=0.85。
[0125] 采用DAL连接代理模式单进程处理速度下降的原因是多了一个代理环节,需要socket交互造成时延增大,单进程处理速度降低。[0126] 总体处理能力(Transaction Per Second,TPS,即:每秒事务处理量)=进程数*单进程处理速度;采用DAL改造后,在数据库连接数相同场景下(数 据库连接实现了复用),可以部署更多的处理进程,理论上可以实现更高的总吞吐能力。[0127] 为最大限度的兼容现有系统,降低实施风险和难度,采用对主库采用独占连接,非主库采用DAL连接代理混合模式,保持总体的性能的均衡。[0128] 从以上数据库架构,可以发现至少具有如下价值:[0129] 1、支持速度QoS策略管理,对有高速接口的数据库(如TT(oracle出品的的内存库产品:timesten),Fastore(华为公司开发的基于物理内存设计的关系数据库系统)内存库,都有直连特性,直连的速度比客户机/服务器(Client,server,C/S)模式快6倍以上)支持高速直连方式方案,避免纯代理方式引入的速度下降。[0130] 2、当应用对多个数据库访问时,支持不同的数据库采用不同的连接方式,业务量大的数据库可以走高速直连,业务量小的数据库走连接代理。[0131] 3、支持数据库的连接方式的动态调整,做到速度和数据库连接数收敛的均衡统一。
[0132] 4、应用层不用做改造,仅在OTL通用接口层进行路由封装和连接方式管控,最大限度的利用现系统代码和以前的业务积累,缩短了改造工期,降低了系统架构改造的成本。[0133] 基于以上对本发明实施例的介绍,本发明实施例提供了一种数据库访问控制方法,应用于数据库系统,上述数据库系统存在至少两个数据库,上述至少两个数据库中包含第一数据库和第二数据库;应用与第一数据库之间建立有数据库连接,数据库系统架构可以参阅图1所示,在图1中相对于APP1而言,数据库1是其第一数据库,其他数据库是第二数据库;需要说明的是,APP1与数据库1如果是预配置的高速直连,那么可以不经过路由和
[0123]
13
CN 106599711 A
说 明 书
10/23页
质量管理1,也即不用经过数据访问层中转,因此图1所示结构作为一个举例不应理解为对本发明实施例数据库架构的唯一性限定;[0134] 具体的数据访问流程,如图6所示,包括:[0135] 601:数据访问层接收来自上述应用的访问请求,确定上述访问请求发往的目标数据库为第二数据库;[0136] 在本实施例中,访问请求可以是应用发往数据库的访问数据库的请求, 也可以是发往数据库的用于建立数据库连接的请求,还可以是诸如查询、修改或更新数据库数据的请求,访问请求仅需要具备确定其目标数据库的作用就可以了,不应做更多限定性的理解。以上第一数据库和第二数据库中“第一”和“第二”是用于区分两个不同数据库使用的,不应理解为具有其他限定含义。[0137] 602:上述数据访问层建立连接代理与上述第二数据库之间的数据库连接,通过上述连接代理将上述访问请求发往上述第二数据库。[0138] 本发明实施例,应用与数据库之间存在两类连接方式:一类是应用与数据库之间的数据库连接,属于高速直连方式;另一类是经连接代理与数据库连接的代理连接方式,属于较低速连接方式。既可以保证高速访问的需求,又可以通过连接代理实现数据库连接的收敛,从而减少数据库连接数量需求,因此可以用于实现数据库应用的线性扩展,并节省数据库连接资源。
[0139] 进一步地,本发明实施例还提供了应用采用高速直连方式访问数据库的处理流程,具体如下:上述方法还包括:[0140] 603:上述数据访问层确定上述访问请求发往的目标数据库为第一数据库;上述数据访问层将上述访问请求通过上述应用与上述第一数据库之间的数据库连接发往上述第一数据库。
[0141] 本实施例步骤在“数据访问层接收来自上述应用的访问请求”之后执行,与“确定上述访问请求发往的目标数据库为第二数据库”属于不同的分支,并不表示步骤603需要在以上步骤601中“确定上述访问请求发往的目标数据库为第二数据库”或者步骤602执行完之后执行的步骤。
[0142] 在本发明实施例中,高速直连的数据库连接,可以是预先配置的也可以是由数据访问层集中管理的,其中采用数据访问层直接管理的方式可以更方便于后期对高速直连的数据库连接进行增加和删除管理,从而提供更好的QoS管理;预配置的方案则在应用对数据库具有较为固定的高速访问需求的应用场景下使用,会使整个数据库系统架构管理更为简洁。具体如下:上述应用与第一数据库之间建立有数据库连接,包括:[0143] 确定上述访问请求的访问速度需求,若上述访问速度需求属于高速直连类,则建立上述应用与第一数据库之间的数据库连接;或者,[0144] 上述应用的主库为第一数据库,上述应用与第一数据库之间的数据库连接为预配置的数据库连接。
[0145] 本实施例基于访问速度确定连接方式的方案中,应用通常对数据库的访问会存在速度需求,有些应用对响应速度比较敏感,因此要求数据库的访问速度快一些,另一些应用则对响应速度要求不高,可以要求数据库的访问速度慢一些;除了应用本身的需求以外,还可能是应用的使用者的性质造成服务的区别对待,例如:为了给高级会员提供更好的服务,
14
CN 106599711 A
说 明 书
11/23页
要求数据库的访问数据快一些,相反普通用户则可以访问速度慢一些。访问速度需求的相关信息可以采用标识的形式指示在访问请求中,也可以是数据访问层按照访问请求的发送方来确定其对应的速度需求;访问速度需求的确定方式本发明实施例不作唯一性限定。[0146] 本实施例基于预配置的方案中,数据库建立过程中可能预先就对各应用所对应的数据进行了区分,将某些应用的主要数据存在了其中一个数据库中,那么这个该应用对该数据库的访问将会较多,那么对于该应用而言,该数据库与该应用之间的可能就有较快的访问速度需求,相应地那些数据较少的数据库则可以较慢,那么在此种情况下,数据库的连接方式可以采用预配置的方式来决定是快速的直连还是慢速的代理。[0147] 以上两个高速直连的数据库连接建立实现过程,前者可以在步骤601“数据访问层接收来自上述应用的访问请求”之后执行,后者则可以在步骤601之前就已经配置完成。[0148] 本发明实施例还提供了,由数据访问层集中管理高速直连的数据库连接方案下,如何建立高速直连的方案,具体如下:上述建立上述应用与第一数据库之间的数据库连接之前,上述方法还包括:
[0149] 确定当前不存在上述应用与第一数据库之间的数据库连接,并且上述第一数据库未达到最大连接数,则建立上述应用与第一数据库之间的数据库连接。
[0150] 如果应用于数据库之间已经存在了需要的连接那么可以不需要再建一条连接避免浪费,对于数据库而言其可以支持的数据库连接数量是有限的,而且数据库连接过多可能导致其性能降低,因此本实施例还确定了其是否达到 最大连接数,对于不同的数据库而言最大连接数是不同的,有些数据库没有最大连接数数据库的连接越多性能越低,那么这里的最大连接数可以是预设的一个为保证访问速度的最高连接数的阈值。本实施例步骤在“建立上述应用与第一数据库之间的数据库连接”之前执行。[0151] 可以理解的是,如果已经存在上述应用与第一数据库之间的数据库连接,那么不需要创建新的高速直连;如果第一数据库已经达到了其支持的最大连接数,那么则无法建立高速直连。
[0152] 本发明实施例还提供了,采用连接代理实现的低速数据库访问,向采用高速直连的高速数据库访问切换,具体如下:在上述数据访问层建立连接代理与上述第二数据库之间的数据库连接之前,即步骤602之前在“确定上述访问请求发往的目标数据库为第二数据库”之后,上述方法还包括:
[0153] 确定上述第二数据库的连接数是否小于第二阈值,并且上述应用对上述第二数据库的访问量或者频率是否大于第三阈值,若是则建立上述应用与第二数据库之间的数据库连接;否则执行上述建立连接代理与上述第二数据库之间的数据库连接。[0154] 在数据库负荷较低,并且应用对数据库的访问较多的情况下,可以考虑为应用提供更快速的访问通道,因此本实施例提供了以上方案。因此第二阈值是用于通过连接数确定数据库负荷较低的一个阈值,该阈值可以依经验确定,本实施例不作唯一性限定。第三阈值则是为了确定应用对某一数据库访问较多的阈值,到底访问量到达多少才算多,访问频率到达多少才算多,也可以依据经验确定,每个领域都可能有所不同,例如:电话用户、即时通讯用户等,其中即时通讯的阈值可能会设置得更高一些,因此每个领域会有不同的阈值设定,具体阈值本实施例不作唯一性限定。在阈值设定好以后,可以对整个系统进行测试,来确定阈值是否合理,在不合理的情况下还可以进行调整。
15
CN 106599711 A[0155]
说 明 书
12/23页
以图1为例,数据库1仅有三条数据库连接,其中,一条连接为高速直连,另外两条为通过连接代理的代理连接,假定数据库1支持1024个数据库连接,那么数据库1的负荷会很低,而且有很多富余的数据库连接;那么此时可以不必使用代理连接方式,从而获得更好的访问速度。那么第二阈值用 于确定是否属于数据库连接数较少,可以建立高速直连的临界点。该数值如何设定,本实施例不作唯一性限定。[0156] 本实施例中,第二阈值和第三阈值用于控制从连接代理向高速直连切换的临界点,阈值的具体设定将会导致的效果是可以进行理论推导获得了,阈值的具体取值可以依经验设定,也可以依系统的负载能力来确定,本实施例对其具体取值不作唯一性限定。[0157] 本发明实施例还提供了,采用高速直连的高速的数据库访问,向采用连接代理实现低速的数据库访问切换的实现方案,具体如下:在建立上述应用与第二数据库之间的数据库连接之后,上述方法还包括:
[0158] 确定上述第二数据库的连接数是否大于第四阈值,并且上述应用对上述第二数据库的访问量或者频率是否小于第五阈值,上述第四阈值大于或等于上述第二阈值,上述第五阈值小于或等于上述第三阈值;若是,则拆除上述应用与第二数据库之间的数据库连接,建立连接代理与上述第二数据库之间的数据库连接。
[0159] 第四阈值和第五阈值的具体取值可以依经验设定,也可以依系统的负载能力来确定,本实施例对其具体取值不作唯一性限定。从本实施例所要达成的技术效果来看是要实现在数据库繁忙并且应用对该繁忙的数据库访问较少的情况下,从高速连接变成低速连接的方案;那么第四阈值是用于通过连接数确定数据库繁忙的临界值,第五阈值则是用于确定数据库访问较少的临界值。在阈值设定好以后,可以对整个系统进行测试,来确定阈值是否合理,在不合理的情况下还可以进行调整。[0160] 在本发明实施例中,连接代理可以是一个进程实现了,整个数据库系统可以存在很多个连接代理,本发明实施例还提供了管理连接代理的具体实现方案如下:上述数据访问层建立连接代理与上述第二数据库之间的数据库连接之前,上述方法还包括:[0161] 上述数据访问层获取当前存在的连接代理的工作状态,确定目标连接代理;上述目标连接代理为当前工作状态为空闲的连接代理;
[0162] 建立上述应用与上述目标连接代理之间的通信连接,或者,若无空闲的连接代理并且上述第二数据库已建立的连接数未超过上述第二数据库支持的 最大连接数,则建立新的连接代理作为目标连接代理;
[0163] 上述数据访问层建立连接代理与上述第二数据库之间的数据库连接,通过上述连接代理将上述访问请求发往上述第二数据库,包括:建立上述目标连接代理与上述第二数据库之间的数据库连接,上述目标连接代理将上述访问请求发往上述第二数据库。[0164] 在本实施例中,如果没有空闲的连接代理,并且不支持建立新的连接代理,那么可以等待空闲的连接代理出现,直到等待时间超时。连接代理的工作状态可以由连接代理主动上报给数据访问层的相关控制模块,由数据访问层的相关控制模块维护连接代理的工作状态的信息;数据访问层需要使用时从维护的信息中提取。也可以是数据访问层查询连接代理的工作状态然后接收连接代理的反馈,具体实现方式本发明实施例不作唯一性限定。本发明实施例还提供了连接代理数量管理的方案,具体如下:上述方法还包括:[0166] 记录当前已有的连接代理,并记录连接代理上报的当前工作状态;
[0165]
16
CN 106599711 A[0167]
说 明 书
13/23页
在连接代理的当前工作状态空闲量大于第一阈值时,删除冗余连接代理;上述冗余连接代理依据各数据库的连接数均衡原则确定。[0168] 在本实施例中,第一阈值的设定可以是一个比例,即空闲的连接代理占总连接代理的比例;第一阈值也可以是个数的数值,例如空闲的连接代理超过多少个,则删除一些连接代理。至于删除多少,可以任意确定,例如:删到另一个设定的空闲连接代理所占的比例,或者删除到空闲连接代理数量在某一数值。连接代理以子进程的形式存在时,建立连接代理可以是建立子进程,删除连接代理的过程则可以是删除子进程。
[0169] 本发明实施例还提供了访问请求存在结果数据情况下的回传实现方案,具体如下:上述方法还包括:
[0170] 接收对应于上述访问请求的结果数据,若上述结果数据的源端与上述应用之间存在数据库连接,则将上述结果数据路由发往上述应用;否则,则将上述结果数据通过上述连接代理发往上述应用。[0171] 需要说明的是,有些访问请求可能并没有结果数据回传,因此并不一定会有结果数据的回传步骤。
[0172] 以下实施例将就以下四个方面对以上实施例进行具体实例的举例说明:[0173] 一、数据库速度QoS初始设置装置:[0174] 例如:某市业务运营支撑系统(Business & Operation Support System,BOSS)承载800万用户,用户信息表数据量很大,为了提高并发性能,将数据按号码号段拆分为4套内存数据库,将不同的号码端的用户信息分片存放到不同的数据库上。假定如下:[0175] APP1应用集群用来支撑数据库1所承载的用户的各项业务,[0176] APP2应用集群用来支撑数据库2所承载的用户的各项业务,[0177] APP3应用集群用来支撑数据库3所承载的用户的各项业务,[0178] APP4应用集群用来支撑数据库4所承载的用户的各项业务,[0179] 每个应用集群都由多个进程组成,各个应用集群对数据库访问速度QoS初始如下表3所示:[0180] 表3
[0181]
17
CN 106599711 A
说 明 书
14/23页
表3的说明:
[0183] 每个应用集群对于主库访问初始为高速直连,对于非主库数据库通过连 接代理(数据库连接复用)进行访问。[0184] 二、速度QoS处理流程(即:数据库连接方式选择):[0185] 例如:某直辖市BOSS系统承载3200万用户,用户信息表数据量很大,为了提高并发性能,将数据按号码号段拆分为8套内存数据库,这样不同的号码用户信息就分片到不同的数据库上。
[0186] 号码A1数据在数据库1节点上,号码A2在数据库2节点上,号码A1和号码A2组成一个家庭网办理了流量共享产品,号码A1给号码A2共享自己的通用分组无线服务技术(General Packet Radio Service,GPRS)免费资源使用;[0187] 当号码A2进行上网使用时,首先根据路由和QOS规则,数据库1节点是自己的主库,对于数据库1节点以高速直连方式访问;其他数据库是非主库,走数据查询代理进行访问。
[0188] 流程说明,如图7所示:[0189] 701:应用APP收到业务请求;[0190] 702:应用将业务请求转换为OTL的访问请求,发送给路由及速度QoS处理装置;[0191] 703:路由及速度QoS处理装置根据业务数分区键值获取路由信息,根据数据分区的数据库的速度QoS设置信息,选择走高速直连还是数据查询代理进行数据访问;[0192] 704:如果数据分区的数据库配置选项是高速直连(假定,如图7所示高速直连到数据库1),检查当前是否存在高速直连路径,如果存在则直接使用直连查询,如果不存则检
[0182]
18
CN 106599711 A
说 明 书
15/23页
查上述数据分区的数据库是否达到最大连接数,如果没有达到,则建立高速直连路径,通过高速直连方式访问该数据库;[0193] 可以理解的是,如果上述数据分区的数据库已经达到最大连接数,那么可以等待上述数据分区的数据库的连接数降到最大连接数以下,直到等待超时。[0194] 705:如果该数据库配置选项是通过连接代理访问,检查当前是否存在连接代理访问的路径,如果存在则直接使用,如果不存则建立和连接代理间查询路径,通过数据代理访问该数据库;
[0195] 以上步骤中,连接代理件的查询路径建立过程如下:连接代理接收到路由及速度QoS处理装置发送的查询指令后,通过子进程与数据库连接复用查询确定需要访问的数据库,即图7所示的数据库2。[0196] 706:路由及速度QoS处理装置将会接收到来自连接代理转发的结果数据,路由及速度QoS处理装置将获得结果数据合成OTL数据,并传递给应用APP;[0197] 707:应用将获得结果数据进行业务处理,形成业务相应用于响应外围调用。[0198] 三、数据库连接方式(速度QoS)动态调整流程:[0199] 客户A从上海可以坐飞机(高速)、高铁(中速)、高速公路(低速)去北京和南京;路由路径不同代价差异巨大,一般说来速度越高代价越高,速度越低代价越小;为了获得较少的总出行时间开销(基于时间和花费综合评估),客户可以坐飞机去北京,坐高铁去南京;
[0200] 同理:同一应用,基于速度QoS调度策略,对不同的数据库的访问方式可以不同。[0201] 客户A4月份需要去南京和杭州,杭州天天去,南京一个月去一次,为了获得较少的总出行时间开销(基于时间和花费综合评估),去杭州可选择高铁,去南京可以选择汽车。
[0202] 客户B4月份需要去南京和杭州,南京天天去,杭州一个月去一次,为了获得较少的总出行时间开销(基于时间和花费综合评估),去南京可选择高铁,去杭州可以选择汽车。
[0203] 同理:不同应用,基于速度QoS调度策略,对相同数据库的访问方式可以不同。[0204] 通过数据访问层DAL的速度QoS调度调整装置,可以根据场景规则设定策略,对应用对数据的路由路径方式进行动态路由调度,需要高速场景走高速路径,低速诉求的场景走低速路径,从而获得最佳性价比。
[0205] 以一个在线计费进程(Call billing process,CBP)连接QoS动态调度样例,进行举例如下:
[0206] 例如:某地市移动计费系统数据库按手机号码段水平拆分为三个数据库 节点:dbNode1、dbNode2、dbNode3;每个数据库节点支撑100万用户,在线计费进程(CBP)启动了3个进程,前端的负载均衡调度模块按号段分发给3个线计费进程(CBP)进行计费处理。业务特点是白天比较忙,夜晚用户访问量逐渐减少,凌晨降到最低,数据库dbNode1承载的高端品牌用户较多,其他数据库节点均为低端品牌神州行。(1)动态调度策略配置,如表4所示:[0208] 表4
[0207] [0209]
19
CN 106599711 A
说 明 书
16/23页
(2)程序启动,进程数据库连接初始化状态如下表5所示:[0211] 表5
[0210] [0212]
20
CN 106599711 A
说 明 书
17/23页
(3)白天(8:00-20:00)用户的业务比较繁忙,根据数据库连接方式(速度QoS)动态调整策略,调整结果如表6所示:[0214] 表6
[0213] [0215]
(4)晚上(20:00-23:00)除数据库dbNode1因为是全球通品牌用户比较多,访问尚
活跃,其他数据库节点访问量很低,需要将直连模式调整为代理模式, 降低该应用的数据库负荷,以便数据库承载其他业务。如表7所示:
[0216]
21
CN 106599711 A[0217] [0218]
说 明 书
18/23页
表7
(5)凌晨(24:00-00:50)所有用户访问都不活跃,数据库节点访问量很低,需要将直连模式调整为代理模式,降低该应用的数据库负荷,以便数据库承载其他业务。如表8所示:
[0220] 表8
[0219] [0221]
[0222]
22
CN 106599711 A
说 明 书
19/23页
基于前面的举例说明,本发明实施例提供的速度QoS动态调整处理流程,如图8所示,包括:[0224] 801:应用启动,路由及速度QoS管理模块读取各数据库的初始连接(速度Qos)规则。初始连接规则如表5的举例。[0225] 802:根据初始连接规则,对相关数据进行直连或通过代理连接。[0226] 803:初始连接完成,应用进行业务处理。[0227] 804:根据配置规则判断是否需要动态调整数据库连接方式;[0228] 此处是触发确定是否需要确定动态调整的触发条件,该步骤中是否需要可以是确定是否到达周期计时点,也可以是其他一些判断条件。本步骤还可以不必执行,直接执行下一步骤的统计。是否动态调整可以参考表4举例的动态调度策略。[0229] 805:如果是需要动态调整,则对各数据库的统计因子(处理业务量,累计处理时间等)对每笔交易进行累计统计;[0230] 806:上笔交易完成后一笔新交易开始,确定是否满足动态调整条件;[0231] 807:如果是则根据调整规则,将当前是高速直连的连接方式调整为代理连接方式,或,将代理连接方式的调整为高速直连。[0232] 具体地如:数据库当前是代理连接方式,根据数据QoS规则要求,满足调整为高速直连访问方式,则查询获取该数据库当前最大连接数,如果当前总连接数小于最大许可连接数,则启动一个高速直连,断开当前和代理连接方式,再进行相关业务处理;反之,可将不常使用的高速直连调整为代理连接方式。具体如何调整的举例如表6、表7或表8的具体举例。
[0233] 808:继续业务处理。
[0234] 以上流程中步骤804到808是循环执行的,直达程序结束运行。[0235] 本发明实施例还提供了一种数据库访问控制装置,应用于数据库系统,上述数据库系统存在至少两个数据库,上述至少两个数据库中包含第一数据库和第二数据库;应用与第一数据库之间建立有数据库连接;该数据库访问控制装置位于数据访问层,可以以实体硬件的形式存在,该装置如图9所示,包括:[0236] 接收单元901,用于接收来自上述应用的访问请求;[0237] 数据库确定单元902,用于确定上述访问请求发往的目标数据库为第二数据库;[0238] 连接建立单元903,用于建立连接代理与上述第二数据库之间的数据库连接;[0239] 请求发送单元904,用于通过上述连接代理将上述访问请求发往上述第二数据库。[0240] 本发明实施例,应用与数据库之间存在两类连接方式:一类是应用与数据库之间的数据库连接,属于高速直连方式;另一类是经连接代理与数据库连接的代理连接方式,属于较低速连接方式。既可以保证高速访问的需求,又可以通过连接代理实现数据库连接的收敛,从而减少数据库连接数量需求,因此可以用于实现数据库应用的线性扩展,并节省数据库连接资源。
[0241] 进一步地,本发明实施例还提供了应用采用高速直连方式访问数据库的处理流程,具体如下:上述数据库确定单元902,还用于确定上述访问请求发往的目标数据库为第
[0223]
23
CN 106599711 A
说 明 书
20/23页
一数据库;
[0242] 上述请求发送单元904,用于将上述访问请求通过上述应用与上述第一数据库之间的数据库连接发往上述第一数据库。[0243] 进一步地,本实施例还提供了基于访问速度需求进行连接管理的方案,具体如下:如图10所示,上述装置还包括:[0244] 需求确定单元1001,用于确定上述访问请求的访问速度需求;[0245] 上述连接建立单元903,还用于若上述访问速度需求属于高速直连类,则建立上述应用与第一数据库之间的数据库连接;[0246] 或者,上述应用的主库为第一数据库,上述应用与第一数据库之间的数据库连接为预配置的数据库连接。
[0247] 本发明实施例还提供了,由数据访问层集中管理高速直连的数据库连接方案下,如果建立高速直连的方案,具体如下:上述连接建立单元903,还用于在建立上述应用与第一数据库之间的数据库连接之前,确定当前不存在上述应用与第一数据库之间的数据库连接,并且上述第一数据库未达到最大连接数,则建立上述应用与第一数据库之间的数据库连接。
[0248] 进一步地,本发明实施例还提供了,采用连接代理实现低速的数据库访问,向采用高速直连的高速的数据库访问切换的实现方案,如图11所示,上述装置还包括:[0249] 确认单元1101,用于在建立连接代理与上述第二数据库之间的数据库连接之前,确定上述第二数据库的连接数是否小于第二阈值,并且上述应用对上述第二数据库的访问量或者频率是否大于第三阈值;[0250] 上述连接建立单元903,用于若上述确认单元1101确定结果为是则建立上述应用与第二数据库之间的数据库连接;否则执行上述建立连接代理与上述第二数据库之间的数据库连接。
[0251] 本发明实施例还提供了,采用高速直连的高速的数据库访问,向采用连接代理实现低速的数据库访问切换的实现方案,具体如下:上述确认单元1101,还用于在建立上述应用与第二数据库之间的数据库连接之后,确定上述第二数据库的连接数是否大于第四阈值,并且上述应用对上述第二数据库的访问量或者频率是否小于第五阈值,上述第四阈值大于或等于上述第二阈值,上述第五阈值小于或等于上述第三阈值;[0252] 上述连接建立单元903,用于若上述确认单元1101确定结果为是则拆除上述应用与第二数据库之间的数据库连接,建立连接代理与上述第二数据库之间的数据库连接。[0253] 在本发明实施例中,连接代理可以是一个进程实现了,整个数据库系统可以存在很多个连接代理,本发明实施例还提供了管理连接代理的具体实现方案如下:如图12所示,上述装置还包括:
[0254] 状态获取单元1201,用于在建立连接代理与上述第二数据库之间的数据库连接之前,获取当前存在的连接代理的工作状态;[0255] 代理确定单元1202,用于确定目标连接代理;上述目标连接代理为当前工作状态为空闲的连接代理;
上述连接建立单元903,用于建立上述应用与上述目标连接代理之间的通信连接,
或者,若无空闲的连接代理并且上述第二数据库已建立的连接数未超过上述第二数据库支
[0256]
24
CN 106599711 A
说 明 书
21/23页
持的最大连接数,则建立新的连接代理作为目标连接代理;建立上述目标连接代理与上述第二数据库之间的数据库连接;[0257] 上述请求发送单元904,用于通过上述目标连接代理将上述访问请求发往上述第二数据库。
[0258] 进一步地,本发明实施例还提供了连接代理数量管理的方案,如图13所示,上述装置还包括:
[0259] 状态记录单元1301,用于记录当前已有的连接代理,并记录连接代理上报的当前工作状态;
[0260] 连接更新单元1302,用于在连接代理的当前工作状态空闲量大于第一阈值时,删除冗余连接代理;上述冗余连接代理依据各数据库的连接数均衡原则确定。
[0261] 本发明实施例还提供了访问请求存在结果数据情况下的回传实现方案,如图14所示,上述装置还包括:
[0262] 数据接收单元1401,用于接收对应于上述访问请求的结果数据;[0263] 数据发送单元1402,还用于若上述结果数据的源端与上述应用之间存在数据库连接,则将上述结果数据路由发往上述应用;否则,则将上述结果数据通过上述连接代理发往上述应用。
[0264] 本发明实施例装置结构中各单元执行内容及其效果,可以参考方法实施例部分,在此不再赘述。
[0265] 本发明实施例还提供了另一种数据库访问控制装置,应用于数据库系统,上述数据库系统存在至少两个数据库,上述至少两个数据库中包含第一数据库和第二数据库;应用与第一数据库之间建立有数据库连接,如图15所示,包括:接收器1501、发射器1502、处理器1503以及存储器1504;数据库可以位于存储器1504内,也可以位于其他设备的存储器内;
[0266] 上述处理器1503,用于接收来自上述应用的访问请求,确定上述访问请求发往的目标数据库为第二数据库;建立连接代理与上述第二数据库之间的数据库连接,通过上述连接代理将上述访问请求发往上述第二数据库。[0267] 应用与数据库之间存在两类连接方式:一类是应用与数据库之间的数据库连接,属于高速直连方式;另一类是经连接代理与数据库连接的代理连接方式,属于较低速连接方式。既可以保证高速访问的需求,又可以通过连接代理实现数据库连接的收敛,从而减少数据库连接数量需求,因此可以用于 实现数据库应用的线性扩展,并节省数据库连接资源。
[0268] 上述处理器1503,还用于确定上述访问请求发往的目标数据库为第一数据库;将上述访问请求通过上述应用与上述第一数据库之间的数据库连接发往上述第一数据库。[0269] 上述处理器1503,具体用于确定上述访问请求的访问速度需求,若上述访问速度需求属于高速直连类,则建立上述应用与第一数据库之间的数据库连接;或者,[0270] 上述应用的主库为第一数据库,上述应用与第一数据库之间的数据库连接为预配置的数据库连接。
上述处理器1503,还用于上述建立上述应用与第一数据库之间的数据库连接之
前,确定当前不存在上述应用与第一数据库之间的数据库连接,并且上述第一数据库未达
[0271]
25
CN 106599711 A
说 明 书
22/23页
到最大连接数,则建立上述应用与第一数据库之间的数据库连接。[0272] 上述处理器1503,还用于在建立连接代理与上述第二数据库之间的数据库连接之前,确定上述第二数据库的连接数是否小于第二阈值,并且上述应用对上述第二数据库的访问量或者频率是否大于第三阈值,若是则建立上述应用与第二数据库之间的数据库连接;否则执行上述建立连接代理与上述第二数据库之间的数据库连接。[0273] 上述处理器1503,还用于在建立上述应用与第二数据库之间的数据库连接之后,确定上述第二数据库的连接数是否大于第四阈值,并且上述应用对上述第二数据库的访问量或者频率是否小于第五阈值,上述第四阈值大于或等于上述第二阈值,上述第五阈值小于或等于上述第三阈值;若是,则拆除上述应用与第二数据库之间的数据库连接,建立连接代理与上述第二数据库之间的数据库连接。[0274] 上述处理器1503,还用于在建立连接代理与上述第二数据库之间的数据库连接之前,获取当前存在的连接代理的工作状态,确定目标连接代理;上述目标连接代理为当前工作状态为空闲的连接代理;
[0275] 建立上述应用与上述目标连接代理之间的通信连接,或者,若无空闲的连接代理并且上述第二数据库已建立的连接数未超过上述第二数据库支持的 最大连接数,则建立新的连接代理作为目标连接代理;
[0276] 建立连接代理与上述第二数据库之间的数据库连接,通过上述连接代理将上述访问请求发往上述第二数据库,包括:建立上述目标连接代理与上述第二数据库之间的数据库连接,上述目标连接代理将上述访问请求发往上述第二数据库。[0277] 上述处理器1503,还用于记录当前已有的连接代理,并记录连接代理上报的当前工作状态;
[0278] 在连接代理的当前工作状态空闲量大于第一阈值时,删除冗余连接代理;上述冗余连接代理依据各数据库的连接数均衡原则确定。[0279] 上述处理器1503,还用于接收对应于上述访问请求的结果数据,若上述结果数据的源端与上述应用之间存在数据库连接,则将上述结果数据路由发往上述应用;否则,则将上述结果数据通过上述连接代理发往上述应用。
[0280] 图16是本发明实施例提供的一种服务器结构示意图,该服务器1600可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(central processing units,CPU)1622(例如,一个或一个以上处理器)和存储器1632,一个或一个以上存储应用程序1642或数据1644的存储介质1630(例如一个或一个以上海量存储设备)。其中,存储器1632和存储介质1630可以是短暂存储或持久存储。存储在存储介质1630的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对服务器中的一系列指令操作。更进一步地,中央处理器1622可以设置为与存储介质1630通信,在服务器1600上执行存储介质1630中的一系列指令操作。
[0281] 服务器1600还可以包括一个或一个以上电源1626,一个或一个以上有线或无线网络接口1650,一个或一个以上输入输出接口1658,和/或,一个或一个以上操作系统1641,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。上述实施例中由方法实施例的步骤可以基于该图16所示的服务器结构。数据访问层有时候也称为是持久层,其功能主要是负责数据库的访问。简单的说法就是实现对数
[0282]
26
CN 106599711 A
说 明 书
23/23页
据表的Select(查询),Insert(插入),Update(更新),Delete(删除)等操作。多个数据库可以位于服务器内的存储介质,也可以位 于其他设备的存储介质,本发明实施例不作唯一性限定。
[0283] 值得注意的是,上述装置实施例中,所包括的各个单元只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。[0284] 另外,本领域普通技术人员可以理解实现上述各方法实施例中的全部或部分步骤是可以通过程序来指令相关的硬件完成,相应的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。[0285] 以上仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明实施例揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
27
CN 106599711 A
说 明 书 附 图
1/8页
图1
28
CN 106599711 A
说 明 书 附 图
2/8页
图2
图3
29
CN 106599711 A
说 明 书 附 图
3/8页
图4
图5
30
CN 106599711 A
说 明 书 附 图
4/8页
图6
图7
31
CN 106599711 A
说 明 书 附 图
5/8页
图8
32
CN 106599711 A
说 明 书 附 图
6/8页
图9
图10
图11
图12
33
CN 106599711 A
说 明 书 附 图
7/8页
图13
图14
图15
34
CN 106599711 A
说 明 书 附 图
8/8页
图16
35
因篇幅问题不能全部显示,请点此查看更多更全内容