用于数据库连接池的资源分配方法和装置的制造方法_3

文档序号:9708319阅读:来源:国知局
定时间阈值的数据库访问请求的个数、且从已执行的数据库访 问请求中获取出现执行错误的数据库访问请求的第二比例、并判断已执行的数据库访问请 求中由客户端发送的数据库访问请求的执行结果是否满足预定条件;若第二个数小于第二 数量阈值、且比例小于第二比例阈值以及执行结果满足预定条件,则判断出允许将数据库 连接池中空闲的数据库连接分配给客户端。
[0067] 其中,第二预定时间阈值可以与前述的第一预定时间阈值相同。第二数量阈值可 以与前述的第一数量阈值相同。第二比例阈值可以与前述的第一比例阈值形同。
[0068] 通过本申请实施例,采用客户端的历史表现对数据库访问请求进行筛选,由于有 些客户端使用某一数据库访问请求时的执行时间和/或出错率可能满足允许将数据库连 接池中空闲的数据库连接分配给该客户端的条件,而另一些客户端在使用同一数据库访问 请求时的执行时间和/或出错率可能不满足允许将数据库连接池中空闲的数据库连接分 配给该客户端的条件,因此可以通过客户端的标识信息进行过滤,防止个别恶意客户端频 繁执行耗时较长sql请求,导致整个数据库相应缓慢,达到了的通过客户端确定是否允许 将数据库连接池中空闲的数据库连接分配给该客户端的效果。
[0069] 优选地,在本申请实施例中,由于客户端在执行数据库访问请求时,也可以记录执 行时间和/或出错率属性,因此在判断已执行的数据库访问请求中由客户端发送的数据库 访问请求的执行结果是否满足预定条件时,可以通过以下任一方式实现:
[0070] 方式31,从已执行的数据库访问请求中由客户端发送的数据库访问请求中获取执 行时间超过第三预定时间阈值的数据库访问请求的第三个数,若第三个数小于第三数量阈 值,则判断出已执行的数据库访问请求中由客户端发送的数据库访问请求的执行结果满足 预定条件。否则,判断出已执行的数据库访问请求中由客户端发送的数据库访问请求的执 行结果不满足预定条件。
[0071] 方式32,从已执行的数据库访问请求中由客户端发送的数据库访问请求中获取出 现执行错误的数据库访问请求的第三比例,若第三比例小于第三比例阈值,则判断出已执 行的数据库访问请求中由客户端发送的数据库访问请求的执行结果满足预定条件。否则, 判断出已执行的数据库访问请求中由客户端发送的数据库访问请求的执行结果不满足预 定条件。
[0072] 方式33,从已执行的数据库访问请求中由客户端发送的数据库访问请求中获取执 行时间超过第三预定时间阈值的数据库访问请求的第三个数、且从已执行的数据库访问请 求中由客户端发送的数据库访问请求中获取出现执行错误的数据库访问请求的第三比例, 若第三个数小于第三数量阈值、且第三比例小于第三比例阈值,则判断出已执行的数据库 访问请求中由客户端发送的数据库访问请求的执行结果满足预定条件。否则,判断出已执 行的数据库访问请求中由客户端发送的数据库访问请求的执行结果满足预定条件。
[0073] 通过本申请实施例,采用执行时间和/或出错率属性来判断客户端发送的数据库 访问请求的执行结果满足预定条件,由于与判断数据库访问请求的判断逻辑类似,因此达 到了整个数据库连接资源分配的判断逻辑一致且简单的效果。
[0074] 需要说明的是,在本申请的前述实施例中,在将数据库连接池中的空闲的数据库 连接分配给客户端之后,客户端执行前述的数据库访问请求并将执行结果属性存储在数据 库列表中。这样,可以为下次是否给发送该数据库访问请求的客户端分配数据库连接提供 分配依据。
[0075] 另外,在本申请的前述实施例中,除了通过上述实施例所述的手段来判断是否允 许给客户端分配数据库连接之外,还可以通过数据库访问请求所对应的业务优先级和/或 数据库访问请求本身的查询条件(如,查询条件的限定值)来判断。这样,可以防止某些优 先级较低的业务的sql请求出现问题,导致全部业务都受到影响。
[0076] 具体地,当数据库连接池中的资源数低于一定阀值时,给业务优先级高的业务分 配数据库连接。例如:对于支付宝账单缴费类业务而言:业务流水创建支付销账等的优先 级远高于欠费单的落地等辅助功能,如果数据库连接池资源紧张时,前者的资源获取优先 级更高。而对于查询条件而言,如果某些sql查询条件的限定值区分能力差,并且执行时耗 时长,返回结果多,则执行数据库连接分配处理。
[0077] 优选地,可以综合数据库访问请求的历史执行结果、客户端的历史表现结果、请求 所对应的业务优先级以及请求本身的查询条件的限定值四个因素来判断是否允许给客户 端分配数据库连接。
[0078] 优选地,在本申请实施例中,在判断出允许将数据库连接池中空闲的数据库连接 分配给客户端之后,资源分配方法还包括:
[0079] S10,创建客户端白名单。
[0080] S12,将被允许分配数据库连接池中空闲的数据库连接的客户端存储至客户端白 名单中。
[0081] 需要说明的是,在创建客户端白名单的同时,可以创建客户端黑名单,其中,将被 允许分配数据库连接池中空闲的数据库连接的客户端之外的客户端存储至客户端黑名单 中。
[0082] 以客户端黑名单为例,该客户端黑名单可以以数据库表的方式直接存储在数据库 中。具体地,在客户端黑名单中,可以存储数据库访问请求的模板、发生时间、执行时间、报 错时间和客户端标识。例如,当存储数据库访问请求为Sql请求时,在客户端黑名单中可以 存储形式如 select*from ebpp_bill_info t where t. biz_type = #BizType#and card_no =#CardNo#的Sql请求的模板。发生时间是指数据库访问请求被发起的时间;执行时间是 指执行数据库访问请求所消耗的时间;报错时间是指在执行数据库访问请求过程中如果出 现错误,则错误上报的时间。需要说明的是,客户端标识可以为用户标识,例如,其可以是该 用户的支付宝账号。
[0083] 同理,客户端白名单中也可以存储上述内容,详细内容同上,再次不再赘述。不同 的是,在客户端白名单和客户端黑名单中,针对同一存储内容存储的参数值不同。
[0084] 需要说明的是,上述的客户端白名单和客户端黑名单中的存储内容可以用于量化 各个客户端的历史执行结果。
[0085] 以下以数据库访问请求为Sql请求为例,详细阐述本申请。
[0086] 如图2所示,该动态分配数据库连接池中的资源的系统架构包括:业务层、应用层 和数据层。其中,客户端为应用层,数据库为数据层。数据层用于接收应用层发送的Sql请 求,并根据Sql请求判断是否允许将数据库连接池中空闲的数据库连接分配给客户端。 [0087] 具体地,如图2所示,数据层中的连接分配决策层首先拦截Sql请求,连接分配决 策层中的连接分配决策模块根据Sql请求查询数据库并获取Sql的历史执行结果(包括 Sql的历史表现和使用Sql的客户端的历史表现)、业务优先级、各表字段的区分度(即, Sql的限定值)3个决策因素,并通过综合这3个决策因素判断出是否允许将数据库连接池 中空闲的数据库连接分配给应用层。
[0088] 优选地,连接分配决策模块可以获取这些因素的权值以及阈值(需要说明的是, 低于该阀值不允许分配数据库连接,相反则允许分配数据库连),并通过总阈值判断出是否 允许将将数据库连接池中空闲的数据库连接分配给应用层。需要说明的是,如果允许将将 数据库连接池中空闲的数据库连接分配给应用层,则从数据库中的数据库连接池获取空闲 的数据库连接分配给应用层,应用层通过数据库连接与数据库进行交互并执行Sql请求, 并将执行结果存储到数据库中。
[0089] 如图2所示,获取前述因素的权值以及阈值之后,确定各个因素的得分情况,并根 据总分数判断是否允许将数据库连接池中空闲的数据库连接分配给应用层。例如,如果sql 请求或者发送sql请求的应用层在各自的黑名单中,则相应的Actor的Score (得分)值 为-00,那么本次决策中Score < Threshold,则不允许分配数据库连接。
[0090] 需要说明的是,数据库中可以存储Sql请求的历史执行结果,例如,数据库中的 Sql请求黑名单或者白名单可以存储Sql请求的历史执行结果,其中,Sql请求的历史执行 结果的存储内容如表1所示:
[0091] 表 1
[0092]
[0093] 这样,便于计算sql维度的历史执行结果和用户维度的sql的历史执行结果。
[0094] 根据本申请的实施例,提供了一种用于数据库连接池的资源分配装置,该用于数 据库连接池的资源分配装置,需要说明的是,本申请实施例所提供的用于数据库连接池的 资源分配方法可以通过本申请实施例的用于数据库连接池的资源分配装置来执行,本申请 实施例的用于数据库连接池的资源分配装置也可以用于执行本申请实施例的用于数据库 连接池的资源分配方法。
[0095] 图3是根据本申请实施例的用于数据库连接池的资源分配装置的示意图。如图3 所示,该装置包括:接收单元302、判断单元304。
[0096] 接收单元302用于接收客户端发送的数据库访问请求。客户端即为前述的应用程 序。客户端需要与数据库交互时,客户端可以向数据库发送数据库访问请求,在数据库进行 相应之前,数据层中的连接分配决策层可以首先拦截客户端发送的数据库访问请求,也即, 连接分配决策层接收客户端发送的数据库访问请求,连接分配决策层用于接收到的根据数 据库访问请求决定是否将数据库连接分配给该客户端。数据库访问请求包括查询、更改、添 加、删除数据库中的数据的请求。
[0097] 判断单元304用于根据数据库访问请求的历史执行结果判断是否允许将数据库 连接池中空闲的数据库连接分配给客户端。数据库访问请求的历史执行结果是指该条数据 库访问请求在本次请求之前的一段时间内被执行时记录的结果,其中,包括该数据库访问 请求是否被成功执行,以及在该数据库访问请求被成功执行时,该历史执行结果还包括数 据库访问请求的执行时间和/或出错率。
[0098] 具体地,可以对数据库访问请求进行解析,得到解析结果,并根据解析结果查询数 据列表中存储的数据库访问请求的历史执行结果,从而判断是否允许将数据库连接池中空 闲的数据库连接分配给客户端。空闲的数据库连接即为可用的数据库连接。
[0099] 优选地,在本申请实施例中,该资源分配装置还可以包括分配单元。分配单元用于 如果判断出允许将数据库连接池中空闲的数据库连接分配给客户端的优先级,则将数据库 连接池中的空闲的数据库连接分配给客户端。如果判断出不允许将数据库连接池中空闲的 数据库连接分配给客户端,则不将数据库连接池中的空闲的数据库连接分配给客户端。具 体地,当前述的历史结果表明该数据库访问请求在历史上表现良好,则将数据库连接池中 的空闲的数据库连接分配给客户端,否则,不将数据库连接池中的空闲的数据库连接分配 给客户端。
[0100] 通过本申请实施例,采用接收客户端发送的数据库访问请求;根据数据库访问请 求的历史执行结果判断是否允许将数据库连接池中空闲的数据库连接分配给客户端;如果 判断出允许将数据库连接池中空闲的数据库连接分配给客户端,则将数据库连接池中的空 闲的数据库连接分配给客户端,由于
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1