CN112416576A - 一种数据库负载均衡的方法及装置 - Google Patents

一种数据库负载均衡的方法及装置 Download PDF

Info

Publication number
CN112416576A
CN112416576A CN202011218080.XA CN202011218080A CN112416576A CN 112416576 A CN112416576 A CN 112416576A CN 202011218080 A CN202011218080 A CN 202011218080A CN 112416576 A CN112416576 A CN 112416576A
Authority
CN
China
Prior art keywords
sql statement
statement
function
determining
list
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202011218080.XA
Other languages
English (en)
Inventor
韩慧敏
杜胜
冯玉
李楠
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Kingbase Information Technologies Co Ltd
Original Assignee
Beijing Kingbase Information Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Kingbase Information Technologies Co Ltd filed Critical Beijing Kingbase Information Technologies Co Ltd
Priority to CN202011218080.XA priority Critical patent/CN112416576A/zh
Publication of CN112416576A publication Critical patent/CN112416576A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/505Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本公开提供了一种数据库负载均衡的方法及装置,涉及数据库技术领域,包括:获取SQL语句;基于预设的名单和关键字,判断SQL语句是否为第一SQL语句;其中,第一SQL语句为操作类型为读操作的SQL语句;名单用于记录需要分发至匹配的节点的SQL语句;如果是,根据负载均衡算法在数据库集群中确定执行第一SQL语句的目的节点。本公开能够简单高效的实现对数据库访问的负载均衡。

Description

一种数据库负载均衡的方法及装置
技术领域
本公开涉及数据库技术领域,尤其涉及一种数据库负载均衡的方法及装置。
背景技术
随着互联网技术的发展,应用业务量的不断提高,越来越多的业务采用了多节点集群的方式,并通过负载均衡器来分担业务压力到集群的各个节点。目前对数据库访问的负载均衡主要有如下两种:
一种是通过应用端直接实现查询负载均衡,该方案需要提前规划数据库端的分库分表方案,同时还需要应用端根据不同查询业务,提前规划查询不同的数据库节点,同时识别SQL类型事务状态,完成分发操作,以达到查询负载均衡的效果。显然,该方案对应用端的侵入较大,增加了复杂度,而且需要提前规划造成限制较多,不够灵活。
另一种是通过负载均衡中间代理的方式来实现,该方式需要增加一层代理层,会造成一定的性能损失;而且依赖于中间件对特定数据库的支持,对于一些国内数据库厂商支持并不友好,增加了整体复杂度。
因此,目前还不能简单高效的实现对数据库访问的负载均衡。
发明内容
为了解决上述技术问题或者至少部分地解决上述技术问题,本公开提供了一种数据库负载均衡的方法及装置。
本公开提供了一种数据库负载均衡的方法,包括:获取SQL语句;
基于预设的名单和关键字,判断所述SQL语句是否为第一SQL语句;其中,所述第一SQL语句为操作类型为读操作的SQL语句;所述名单用于记录需要分发至匹配的节点的SQL语句;如果是,根据负载均衡算法在数据库集群中确定执行所述第一SQL语句的目的节点。
进一步,所述名单包括:主机语句名单、主机函数名单、函数黑名单、函数白名单和临时表;其中,所述主机语句名单用于记录只发主机服务器且不改变事务状态的SQL语句;所述主机函数名单用于记录只发主机服务器且不改变事务状态的函数;所述函数黑名单用于记录读写属性为写的函数;所述函数白名单用于记录读写属性为读的函数;所述临时表用于记录临时表的名称。
进一步,所述判断所述SQL语句是否为第一SQL语句的步骤,包括:判断所述SQL语句是否包含于所述主机语句名单中;如果没有包含于所述主机语句名单中,判断所述SQL语句是否满足预设匹配条件;所述预设匹配条件包括:SQL语句包含第一关键词集合中的至少一个关键词,且不包含第二关键词集合中的至少一个关键词;如果满足所述预设匹配条件,判断所述SQL语句是否为包含调用数据库函数操作的语句;如果为不包含调用数据库函数操作的语句,确定所述SQL语句的操作类型为读操作,并确定所述SQL语句为第一SQL语句。
进一步,在所述判断所述SQL语句是否为包含调用数据库函数操作的语句的步骤之后,所述方法还包括:当确定所述SQL语句为包含调用数据库函数操作的语句时,判断所述SQL语句调用的函数是否包含于所述主机函数名单中;如果包含于所述主机函数名单中,确定所述SQL语句的操作类型为写操作,并确定所述SQL语句为第二SQL语句。
进一步,在所述判断所述SQL语句调用的函数是否包含于所述主机函数名单中的步骤之后,所述方法还包括:当确定所述SQL语句调用的函数不包含于所述主机函数名单中时,判断所述函数黑名单中记录的函数是否为空;如果不为空,判断所述SQL语句调用的函数是否包含于所述函数黑名单中;如果没有包含于所述函数黑名单中,确定所述SQL语句的操作类型为读操作,并确定所述SQL语句为所述第一SQL语句;如果包含于所述函数黑名单中,确定所述SQL语句的操作类型为写操作,并确定所述SQL语句为第二SQL语句。
进一步,在所述判断所述函数黑名单中记录的函数是否为空的步骤之后,所述方法还包括:当所述函数黑名单中记录的函数为空时,判断所述SQL语句调用的函数是否包含于所述函数白名单中;如果包含于所述函数白名单中,确定所述SQL语句的操作类型为读操作,并确定所述SQL语句为所述第一SQL语句;如果不包含于所述函数白名单中,确定所述SQL语句的操作类型为写操作,并确定所述SQL语句为所述第二SQL语句。
进一步,所述根据负载均衡算法在数据库集群中确定执行所述第一SQL语句的目的节点的步骤,包括:针对当前第一SQL语句,执行如下节点确定操作:基于所述数据库集群中各节点的初始权重和历史权重中的至少一项,确定各节点的当前权重;其中,所述历史权重是执行与所述当前第一SQL语句相连的上一个第一SQL语句时各节点的权重;根据所述当前权重,将权重最大的节点确定为执行所述当前第一SQL语句的目的节点。
进一步,所述基于所述数据库集群中各节点的初始权重和历史权重中的至少一项,确定各节点的当前权重的步骤,包括:根据如下表达式确定各节点的当前权重:
W′C=W+W
Figure BDA0002761102890000041
其中,
Figure BDA0002761102890000042
表示历史权重最大的第一节点的权重,
Figure BDA0002761102890000043
表示所述第一节点的当前权重,W表示所述数据库集群中历史权重非最大的第二节点的权重,W′C表示所述第二节点的当前权重,W为各节点的初始权重,Sw表示各节点的初始权重之和。
进一步,所述SQL语句中还包括操作类型为写操作的SQL语句;所述方法还包括:将所述操作类型为写操作的SQL语句发送给主机服务器执行。
本公开还提供了一种数据库负载均衡的装置,包括:语句获取模块,用于获取SQL语句;语句确定模块,用于基于预设的名单和关键字,判断所述SQL语句是否为第一SQL语句;其中,所述第一SQL语句为操作类型为读操作的SQL语句;所述名单用于记录需要分发至匹配的节点的SQL语句;节点确定模块,用于如果是,根据负载均衡算法在数据库集群中确定执行所述第一SQL语句的目的节点。
本公开实施例提供的技术方案与现有技术相比具有如下优点:
本公开实施例提供了一种数据库负载均衡的方法及装置,首先客户端基于预设的名单和关键字,从获取的SQL语句中确定操作类型为读操作的第一SQL语句;该名单用于记录需要分发至匹配的节点的SQL语句;然后根据负载均衡算法在数据库集群中确定执行每个第一SQL语句的目的节点。上述实施例通过在客户端确定读操作的第一SQL语句,令上层应用可以无侵入的使用第一SQL语句,降低了使用成本;根据负载均衡算法,可以对集群中各节点的负载率进行灵活调整,提升目的节点的均衡合理性,避免出现业务集中在一个节点的不均衡问题;同时,上述方案无需引入第三方负载均衡组件,减少了架构层级,维护简单,因此,上述方式能够简单高效的实现对数据库访问的负载均衡。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本公开实施例所述数据库负载均衡的方法流程图;
图2为本公开实施例所述SQL语句判断方法流程图;
图3为本公开实施例所述数据库负载均衡的装置结构框图。
具体实施方式
为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
考虑到目前还不能简单高效的实现对数据库访问的负载均衡,本公开实施例提供了一种数据库负载均衡的方法及装置。为便于理解,以下对本公开实施例进行详细介绍。
实施例一:
参照图1所示的数据库负载均衡的方法流程图,该方法适用于访问数据库集群的JDBC客户端,主要包括如下步骤:
步骤S102,获取SQL语句。
根据SQL语句对数据库进行的操作,可以将SQL语句分为如下两类:操作类型为读操作的语句(可称为读语句),以及操作类型为写操作的语句(可称为写语句)。读语句不对数据库进行写操作,如查询语句;写语句对数据库进行写操作,如增删改语句等。
步骤S104,基于预设的名单和关键字,判断SQL语句是否为第一SQL语句;其中,第一SQL语句为操作类型为读操作的SQL语句;名单用于记录需要分发至匹配的节点的SQL语句。
读语句以查询语句为例,查询语句通常包含关键字select。但数据库的SQL语句通常比较复杂,比如,基于关键字select将SQL语句识别为读语句后,但该语句同时还包含写操作,由此只简单地根据关键字select,无法准确地识别SQL语句为读语句或写语句。或者,即使是不包含写操作的SQL语句,也不一定能被识别为读语句,比如查询临时表语句、包含在事务中的查询语句等。
基于此,本实施例可以预先设置多个名单和关键词,以准确地识别SQL语句为读语句还是写语句,如果确定SQL语句为读操作的语句,则将该SQL语句确定为第一SQL语句,并按照如下步骤S106,将第一SQL语句分发至目的节点。
步骤S106,在确定SQL语句为第一SQL语句的情况下,根据负载均衡算法在数据库集群中确定执行第一SQL语句的目的节点。其中,数据库集群为包括一个主机服务器和多个备机服务器的读写分离集群。
可以理解,如果确定SQL语句是操作类型为写操作的SQL语句,则可以将该操作类型为写操作的SQL语句发送给主机服务器执行。对于第一SQL语句,则可以根据负载均衡算法和数据库集群中各节点的权重,在所有节点中选出一个目的节点,将第一SQL语句发送给目的节点执行。
本公开实施例提供的数据库负载均衡的方法,首先客户端基于预设的名单和关键字,判断获取的SQL语句是否为操作类型为读操作的第一SQL语句;然后在是的情况下,根据负载均衡算法在数据库集群中确定执行该第一SQL语句的目的节点。上述实施例通过在客户端确定读操作的第一SQL语句,令上层应用可以无侵入的使用第一SQL语句,降低了使用成本;根据负载均衡算法,可以对集群中各节点的负载率进行灵活调整,提升目的节点的均衡合理性,避免出现业务集中在一个节点的不均衡问题;同时,上述方案无需引入第三方负载均衡组件,减少了架构层级,维护简单,因此,上述方式能够简单高效的实现对数据库访问的负载均衡。
在一种实施例中,上述名单可以包括但不限于:主机语句名单(MastersqlList)、主机函数名单(MasterFunctionList)、函数黑名单(BlackList)、函数白名单(WhiteList)和临时表(TempTable)。
其中,主机语句名单MastersqlList用于记录只发主机服务器且不改变事务状态的SQL语句;主机语句名单诸如配置为如下:MasterSqlList=SET TRANSACTION READWRITE;BEGIN READ WRITE。
主机函数名单MasterFunctionList用于记录只发主机服务器且不改变事务状态的函数;主机函数名单诸如配置为如下:MasterFunctionList=updateXXX;writeXXX。
函数黑名单BlackList用于记录读写属性为写的函数;函数黑名单诸如配置为如下:BlackList=updateFunction;insertFunction。
函数白名单WhiteList用于记录读写属性为读的函数;函数白名单诸如配置为如下:WhiteList=count;sum;to_char。在应用场景中,函数黑名单BlackList和函数白名单WhiteList一般不同时配置;若同时配置,则只有函数黑名单BlackList生效。
临时表TempTable用于记录临时表名称。临时表诸如配置为如下:TempTable=tempA;tempB。
参照图2,本实施例提供一种基于以上名单和预设的关键字,判断SQL语句是否为读操作的第一SQL语句的实现过程,参照如下所示:
步骤S202,判断SQL语句是否包含于主机语句名单MastersqlList中。
具体实现方式可以为:判断SQL语句是否包含于主机语句名单MastersqlList;如果包含在主机语句名单MastersqlList中,表示该SQL语句为只发主机服务器且不改变事务状态的SQL语句,从而执行如下步骤S218,将SQL语句确定为写操作的第二SQL语句。如果不包含在主机语句名单MastersqlList中,则执行如下步骤S204。
步骤S204,判断SQL语句是否满足预设匹配条件;预设匹配条件包括:SQL语句包含第一关键词集合中的至少一个关键词,且不包含第二关键词集合中的至少一个关键词。
其中,第一关键词集合中的关键词可以包括:select、call、show;在实际应用中,关键词show通常应用于以show开头的SQL语句。第二关键词集合中的关键词可以包括:explain、create、update、prepare、grant、declare、into、set、delete、revoke、audit、drop、begin、rollback、nextval、currval、setval、lastval、TempTable(临时表名称)。
在一些具体实施例中,预设匹配条件还同时包括:查询语句不能处于事务中,或者在处于事务中时不能在写语句之后。
如果SQL语句满足上述预设匹配条件,则执行如下步骤S206;如果SQL语句不满足上述预设匹配条件,则执行如下步骤S218,将SQL语句确定为写操作的第二SQL语句。
步骤S206,判断SQL语句是否为包含调用数据库函数操作的语句;其中,判断方法为函数名应该存在于左括号之前,但不能为数据库的关键词。
如果不是包含调用数据库函数操作的语句,表示该SQL语句已经可以确定读取属性,通常调用数据库函数的格式为{[?=]call xxx([?,?,?,…])};在此情况下,执行如下步骤S216,将SQL语句确定为读操作的第一SQL语句。如果是包含调用数据库函数操作的语句,则执行如下步骤S208,来进一步判断SQL语句为第一SQL语句还是第二SQL语句。
步骤S208,判断SQL语句调用的函数是否包含于主机函数名单MasterFunctionList中;如果包含于主机函数名单MasterFunctionList中,则执行如下步骤S218,将SQL语句确定为写操作的第二SQL语句;如果不包含于主机函数名单MasterFunctionList中,则执行如下步骤S210,来进一步判断SQL语句为第一SQL语句还是第二SQL语句。
步骤S210,判断函数黑名单BlackList中记录的函数是否为空;如果不为空,表示该SQL语句调用的函数可能为函数黑名单BlackList中记录的写入数据库函数,从而执行如下步骤S212。如果为空,则执行如下步骤S214。
步骤S212,判断SQL语句调用的函数是否包含于函数黑名单BlackList中;如果没有包含于函数黑名单BlackList中,执行如下步骤S216,确定SQL语句为第一SQL语句。如果包含于函数黑名单BlackList中,执行如下步骤S218,确定SQL语句为第二SQL语句。
步骤S214,判断SQL语句调用的函数是否包含于函数白名单WhiteList中;如果包含于函数白名单WhiteList中,执行如下步骤S216,确定SQL语句为第一SQL语句;如果不包含于函数白名单WhiteList中,执行如下步骤S218,确定SQL语句为第二SQL语句。
步骤S216,确定SQL语句的操作类型为读操作,并确定SQL语句为第一SQL语句。
步骤S218,确定SQL语句的操作类型为写操作,并确定SQL语句为第二SQL语句。
为了更好地理解图2所示的SQL语句的判断实施例,接下来结合一种具体示例对SQL语句的判断方法进行详细描述。
示例为:数据库集群包括一个主机服务器和两个备机服务器;其中,主机服务器IP为192.168.0.1,第一备机服务器IP为192.168.0.2,第二备机服务器IP为192.168.0.3。它们对应的初始权重分别为1、2、3。函数黑名单BlackList配置为updateName。通过JDBC客户端驱动并使用自动提交模式执行的SQL语句可参照如下语句a至h所示:
语句a:create table test(id int primary key,name varchar(20));
语句b:insert into test values(1,'aaa');
语句c:select*from test;
语句d:select name into username from test where id=1;
语句e:select count(*)from test;
语句f:{?=call getId(?)}
语句g:{call updateName(?)}
语句h:show client_encoding;
在获取到上述SQL语句之后,首先参照图2,对SQL语句的操作类型进行判断,以确定读操作的第一SQL语句或者写操作的第二SQL语句。为便于描述,以下将第一SQL语句称为读语句,将第二SQL语句称为写语句。
针对语句a、语句b均不包含如下关键字:select、call或show,如步骤S204所示,语句a和b被判定为写语句,可以直接发送给主机服务器192.168.0.1执行。
语句c包含关键字select,且不包含被判定为写操作的第二关键字集合中的关键字,也不包含调用数据库函数的操作,确定语句c为读语句。
语句d包含关键字select,但是同时包含被识别为写语句的第二关键字集合中的关键字into,故确定为写语句,可以直接发送给主机服务器192.168.0.1执行。
语句e包含关键字select,同时包含函数count,函数黑名单不为空且count函数不包含在函数黑名单中(参照步骤S206-S212),故确定语句e为读语句。
语句f包含关键字call,且函数getId不包含在函数黑名单中,故确定语句f为读语句。
语句g包含call关键字,但是函数updateName包含在函数黑名单中,故确定为写语句,可以直接发送给主机服务器192.168.0.1执行。
语句h为以关键字show开头的语句,故确定语句h为读语句。
在确定SQL语句为读语句或写语句之后,对于写语句可直接发送给主机服务器执行,对于读语句,可以根据负载均衡算法(如平滑加权轮询算法)在数据库集群中确定目的节点,将读语句发送给目的节点执行。对此,基于上述包括一个主机服务器和两个备机服务器的集群示例,本实施例提供一种目的节点的具体确定方式。
上述语句c、语句e和语句f均为读语句,依次作为当前第一SQL语句。针对当前第一SQL语句,执行如下节点确定操作:
步骤1,基于数据库集群中各节点的初始权重和历史权重中的至少一项,确定各节点的当前权重。其中,历史权重是执行与当前第一SQL语句相连的上一个第一SQL语句时各节点的权重。
步骤2,根据当前权重,将权重最大的节点确定为执行当前第一SQL语句的目的节点。
具体的,可参照如下表1,当首次轮询时,当前第一SQL语句为语句c,将各节点的初始权重确定为各节点的当前权重,也即,主机服务器的当前权重为
Figure BDA0002761102890000131
第一备机服务器的当前权重为
Figure BDA0002761102890000132
第二备机服务器的当前权重为
Figure BDA0002761102890000133
根据当前权重,确定权重最大的节点为第二备机服务器(IP为192.168.0.3),从而将第二备机服务器确定目的节点,将语句c发送给第二备机服务器执行。完成语句c的分发后,进入第二次轮询。
在第二次轮询时,当前第一SQL语句为语句e。根据各节点的初始权重和历史权重,确定各节点的当前权重;其中,各节点的历史权重为首次轮询时各节点的权重,也即,主机服务器的历史权重为
Figure BDA0002761102890000141
第一备机服务器的历史权重为
Figure BDA0002761102890000142
第二备机服务器的历史权重为
Figure BDA0002761102890000143
对于首次轮询中非权重最大的节点,也即主机服务器和第一备机服务器,可以参照如下公式(1),将初始权重W和历史权重W之和确定为节点的新的当前权重W′C
W′C=W+W (1)
根据公式(1),主机服务器的新的当前权重为
Figure BDA0002761102890000144
第一备机服务器的新的当前权重为
Figure BDA0002761102890000145
对于首次轮询中权重最大的节点,也即第二备机服务器,可以参照如下公式(2),确定权重最大的节点的新的当前权重
Figure BDA0002761102890000146
Figure BDA0002761102890000147
其中,W为该权重最大的节点的初始权重,
Figure BDA0002761102890000148
为该权重最大的节点的历史权重,Sw为集群中各节点的初始权重之和。
根据公式(2),第二备机服务器的新的当前权重为
Figure BDA0002761102890000149
至此,第二次轮询时各节点的当前权重依次为2、4、0。可以看出,权重最大的节点变更为了第一备机服务器(IP为192.168.0.2),从而将第一备机服务器确定为目的节点,将语句e发送给第一备机服务器执行。完成语句e的分发后,进入第三次轮询。
在第三次轮询时,当前第一SQL语句为语句f。参照上述公式(1)和(2),主节点服务器新的当前权重为
Figure BDA00027611028900001410
第一备节点服务器新的当前权重为
Figure BDA00027611028900001411
第二备节点服务器新的当前权重为
Figure BDA00027611028900001412
权重最大的节点变更为了主节点服务器(IP为192.168.0.1)或第二备节点服务器(IP为192.168.0.3),在此情况下,可随机选取其中一个节点作为目的节点,或者根据预设的优先级选取其中一个节点作为目的节点。本实施例可以将主节点服务器(IP为192.168.0.1)确定为目的节点,将语句f发送给主节点服务器执行。完成语句f的分发后,进入第四次轮询。
在第四次轮询时,当前第一SQL语句为语句h,具体可参照表1,在此不再展开描述。
表1
Figure BDA0002761102890000151
根据以上描述和表1可知,通过平滑加权轮询算法,可以使确定的目的节点的序列较为均匀,不会在一段时间内将业务集中在一个节点上,导致某一节点的负载率在一段时间内集中上升,造成较大负载。因此,该实施例可以使负载达到较好的效果。
综上,上述实施例所提供的数据库负载均衡的方法,在客户端实现SQL语句的负载均衡,充分考虑了客户端对数据库访问的负载均衡问题。一方面,通过在JDBC客户端驱动中增加SQL语句判别功能和分发目的节点的功能,并对应用完全透明,上层应用可以无侵入的使用,实现业务分发功能,降低了使用成本,且无需引入第三方负载均衡组件,可以减少架构层级,维护简单。第二方面,通过平滑加权轮询算法实现的SQL语句分发策略,提供对各个节点的负载率指定,可根据节点的性能灵活配置,更加合理利用现有资源;同时使目的节点的选择更加均衡合理,避免出现某段时间业务集中在一个节点的不均衡问题。因此,本公开实施例能够简单高效的实现对数据库访问的负载均衡,较好的满足现有应用的需求。
实施例二:
基于上述实施例,本实施例提供一种数据库负载均衡的装置,参照图3,该装置包括:
语句获取模块302,用于获取SQL语句;
语句确定模块304,用于基于预设的名单和关键字,判断所述SQL语句是否为第一SQL语句;其中,所述第一SQL语句为操作类型为读操作的SQL语句;所述名单用于记录需要分发至匹配的节点的SQL语句;
节点确定模块306,用于如果是,根据负载均衡算法在数据库集群中确定执行所述第一SQL语句的目的节点。
本公开实施例提供的数据库负载均衡的装置,通过在客户端确定读操作的第一SQL语句,令上层应用可以无侵入的使用第一SQL语句,降低了使用成本;根据负载均衡算法,可以对集群中各节点的负载率进行灵活调整,提升目的节点的均衡合理性,避免出现业务集中在一个节点的不均衡问题;同时,上述方案无需引入第三方负载均衡组件,减少了架构层级,维护简单,因此,上述方式能够简单高效的实现对数据库访问的负载均衡。
本实施例所提供的装置,其实现原理及产生的技术效果和前述实施例相同,为简要描述,本实施例部分未提及之处,可参考前述实施例中相应内容。
基于前述实施例,本实施例给出了一种电子设备,包括处理器和存储装置;存储装置上存储有计算机程序,计算机程序在被处理器运行时执行上述方法。
进一步,本实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器运行时执行上述方法的步骤。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (10)

1.一种数据库负载均衡的方法,其特征在于,包括:
获取SQL语句;
基于预设的名单和关键字,判断所述SQL语句是否为第一SQL语句;其中,所述第一SQL语句为操作类型为读操作的SQL语句;所述名单用于记录需要分发至匹配的节点的SQL语句;
如果是,根据负载均衡算法在数据库集群中确定执行所述第一SQL语句的目的节点。
2.根据权利要求1所述的方法,其特征在于,所述名单包括:主机语句名单、主机函数名单、函数黑名单、函数白名单和临时表;
其中,所述主机语句名单用于记录只发主机服务器且不改变事务状态的SQL语句;
所述主机函数名单用于记录只发主机服务器且不改变事务状态的函数;
所述函数黑名单用于记录读写属性为写的函数;
所述函数白名单用于记录读写属性为读的函数;
所述临时表用于记录临时表的名称。
3.根据权利要求2所述的方法,其特征在于,所述判断所述SQL语句是否为第一SQL语句的步骤,包括:
判断所述SQL语句是否包含于所述主机语句名单;
如果没有包含于所述主机语句名单中,判断所述SQL语句是否满足预设匹配条件;所述预设匹配条件包括:SQL语句包含第一关键词集合中的至少一个关键词,且不包含第二关键词集合中的至少一个关键词;
如果满足所述预设匹配条件,判断所述SQL语句是否为包含调用数据库函数操作的语句;
如果为不包含调用数据库函数操作的语句,确定所述SQL语句的操作类型为读操作,并确定所述SQL语句为第一SQL语句。
4.根据权利要求3所述的方法,其特征在于,在所述判断所述SQL语句是否为包含调用数据库函数操作的语句的步骤之后,所述方法还包括:
当确定所述SQL语句为包含调用数据库函数操作的语句时,判断所述SQL语句调用的函数是否包含于所述主机函数名单中;
如果包含于所述主机函数名单中,确定所述SQL语句的操作类型为写操作,并确定所述SQL语句为第二SQL语句。
5.根据权利要求4所述的方法,其特征在于,在所述判断所述SQL语句调用的函数是否包含于所述主机函数名单中的步骤之后,所述方法还包括:
当确定所述SQL语句调用的函数不包含于所述主机函数名单中时,判断所述函数黑名单中记录的函数是否为空;
如果不为空,判断所述SQL语句调用的函数是否包含于所述函数黑名单中;
如果没有包含于所述函数黑名单中,确定所述SQL语句的操作类型为读操作,并确定所述SQL语句为所述第一SQL语句;
如果包含于所述函数黑名单中,确定所述SQL语句的操作类型为写操作,并确定所述SQL语句为第二SQL语句。
6.根据权利要求5所述的方法,其特征在于,在所述判断所述函数黑名单中记录的函数是否为空的步骤之后,所述方法还包括:
当所述函数黑名单中记录的函数为空时,判断所述SQL语句调用的函数是否包含于所述函数白名单中;
如果包含于所述函数白名单中,确定所述SQL语句的操作类型为读操作,并确定所述SQL语句为所述第一SQL语句;
如果不包含于所述函数白名单中,确定所述SQL语句的操作类型为写操作,并确定所述SQL语句为所述第二SQL语句。
7.根据权利要求1所述的方法,其特征在于,所述根据负载均衡算法在数据库集群中确定执行所述第一SQL语句的目的节点的步骤,包括:
针对当前第一SQL语句,执行如下节点确定操作:
基于所述数据库集群中各节点的初始权重和历史权重中的至少一项,确定各节点的当前权重;其中,所述历史权重是执行与所述当前第一SQL语句相连的上一个第一SQL语句时各节点的权重;
根据所述当前权重,将权重最大的节点确定为执行所述当前第一SQL语句的目的节点。
8.根据权利要求7所述的方法,其特征在于,所述基于所述数据库集群中各节点的初始权重和历史权重中的至少一项,确定各节点的当前权重的步骤,包括:
根据如下表达式确定各节点的当前权重:
WC′=W+W
Figure FDA0002761102880000041
其中,
Figure FDA0002761102880000042
表示历史权重最大的第一节点的权重,
Figure FDA0002761102880000043
表示所述第一节点的当前权重,W表示所述数据库集群中历史权重非最大的第二节点的权重,WC′表示所述第二节点的当前权重,W为各节点的初始权重,Sw表示各节点的初始权重之和。
9.根据权利要求1所述的方法,其特征在于,所述SQL语句中还包括操作类型为写操作的SQL语句;所述方法还包括:
将所述操作类型为写操作的SQL语句发送给主机服务器执行。
10.一种数据库负载均衡的装置,其特征在于,包括:
语句获取模块,用于获取SQL语句;
语句确定模块,用于基于预设的名单和关键字,判断所述SQL语句是否为第一SQL语句;其中,所述第一SQL语句为操作类型为读操作的SQL语句;所述名单用于记录需要分发至匹配的节点的SQL语句;
节点确定模块,用于如果是,根据负载均衡算法在数据库集群中确定执行所述第一SQL语句的目的节点。
CN202011218080.XA 2020-11-04 2020-11-04 一种数据库负载均衡的方法及装置 Pending CN112416576A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011218080.XA CN112416576A (zh) 2020-11-04 2020-11-04 一种数据库负载均衡的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011218080.XA CN112416576A (zh) 2020-11-04 2020-11-04 一种数据库负载均衡的方法及装置

Publications (1)

Publication Number Publication Date
CN112416576A true CN112416576A (zh) 2021-02-26

Family

ID=74828158

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011218080.XA Pending CN112416576A (zh) 2020-11-04 2020-11-04 一种数据库负载均衡的方法及装置

Country Status (1)

Country Link
CN (1) CN112416576A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113342481A (zh) * 2021-07-07 2021-09-03 中国工商银行股份有限公司 一种事务状态的确认方法及装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160110439A1 (en) * 2014-10-21 2016-04-21 International Business Machines Corporation Database management system and method of operation
CN107066575A (zh) * 2017-04-11 2017-08-18 广东亿迅科技有限公司 用于实现数据库读写负载均衡的方法及其系统
CN111355814A (zh) * 2020-04-21 2020-06-30 上海润欣科技股份有限公司 一种负载均衡方法、装置及存储介质
CN111737001A (zh) * 2020-06-24 2020-10-02 国网电力科学研究院有限公司 一种计算系统负载均衡方法、装置及存储介质
CN111737000A (zh) * 2020-06-22 2020-10-02 四川长虹电器股份有限公司 一种实现负载均衡的方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160110439A1 (en) * 2014-10-21 2016-04-21 International Business Machines Corporation Database management system and method of operation
CN107066575A (zh) * 2017-04-11 2017-08-18 广东亿迅科技有限公司 用于实现数据库读写负载均衡的方法及其系统
CN111355814A (zh) * 2020-04-21 2020-06-30 上海润欣科技股份有限公司 一种负载均衡方法、装置及存储介质
CN111737000A (zh) * 2020-06-22 2020-10-02 四川长虹电器股份有限公司 一种实现负载均衡的方法
CN111737001A (zh) * 2020-06-24 2020-10-02 国网电力科学研究院有限公司 一种计算系统负载均衡方法、装置及存储介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113342481A (zh) * 2021-07-07 2021-09-03 中国工商银行股份有限公司 一种事务状态的确认方法及装置
CN113342481B (zh) * 2021-07-07 2024-03-26 中国工商银行股份有限公司 一种事务状态的确认方法及装置

Similar Documents

Publication Publication Date Title
JP4132441B2 (ja) 管理対象オブジェクトのデータ管理装置
CN101034990B (zh) 权限管理方法及装置
US8200628B2 (en) Multi-tenancy data storage and access method and apparatus
US10241839B2 (en) Method and system for generating a virtual device resource accessible by an application
CN109936571B (zh) 一种海量数据共享方法、开放共享平台及电子设备
CN107784044B (zh) 表数据查询方法及装置
KR101085639B1 (ko) 테이블 값 함수를 호출하는 질의의 효율적 평가를 위한시스템 및 방법
US7865521B2 (en) Access control for elements in a database object
CN104737157B (zh) 联合数据库系统
US20050108247A1 (en) Distributed database system
CN100484040C (zh) 实现网格资源适配的系统、方法
US20150100551A1 (en) Database Virtualization
US11816510B2 (en) Elastic data partitioning of a database
WO2017113962A1 (zh) 访问分布式数据库的方法和分布式数据服务的装置
CN105468619B (zh) 用于数据库连接池的资源分配方法和装置
US8015195B2 (en) Modifying entry names in directory server
US20200233861A1 (en) Elastic data partitioning of a database
CA3017523A1 (en) Technologies for auto discover and connect to a rest interface
CN114860764A (zh) 分布式数据库查询的优化方法、系统及电子设备
CN112416576A (zh) 一种数据库负载均衡的方法及装置
US20200233848A1 (en) Elastic data partitioning of a database
CN101483668A (zh) 热点数据的网络存储和访问方法、设备及系统
US20230344781A1 (en) Grouping resource metadata tags
CN113779068A (zh) 数据查询方法、装置、设备及存储介质
CN102402614B (zh) 一种目录服务跨域数据解析方法及系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination