CN107066575B - 用于实现数据库读写负载均衡的方法及其*** - Google Patents

用于实现数据库读写负载均衡的方法及其*** Download PDF

Info

Publication number
CN107066575B
CN107066575B CN201710234568.3A CN201710234568A CN107066575B CN 107066575 B CN107066575 B CN 107066575B CN 201710234568 A CN201710234568 A CN 201710234568A CN 107066575 B CN107066575 B CN 107066575B
Authority
CN
China
Prior art keywords
read
write
sql
node
sql statement
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.)
Active
Application number
CN201710234568.3A
Other languages
English (en)
Other versions
CN107066575A (zh
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.)
Guangdong Eshore Technology Co Ltd
Original Assignee
Guangdong Eshore Technology 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 Guangdong Eshore Technology Co Ltd filed Critical Guangdong Eshore Technology Co Ltd
Priority to CN201710234568.3A priority Critical patent/CN107066575B/zh
Publication of CN107066575A publication Critical patent/CN107066575A/zh
Application granted granted Critical
Publication of CN107066575B publication Critical patent/CN107066575B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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
    • G06F16/217Database tuning
    • 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/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • G06F16/24549Run-time optimisation
    • 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/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24553Query execution of query operations
    • G06F16/24561Intermediate data storage techniques for performance improvement

Landscapes

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

Abstract

本发明涉及用于实现数据库读写负载均衡的方法及其***,该方法包括获取MySQL报文;对MySQL报文进行解析,获取具体的SQL语句;判断SQL语句是否携带HINT信息;若携带,则对SQL语句的平衡值的判断,获取SQL语句的读写属性,并进入最后一步骤;若不携带,则解析SQL逻辑,根据解析的结果获取SQL语句的读写属性,并进入最后一步骤;当读写属性为读时,根据从节点的权重读取数据,当读写属性为写时,向写节点写入数据。本发明实现极大简化应用***开发难度,通过读写负载提升数据库的访问能力,支持根据节点权重进行负载均衡以及支持数据库集群动态增删节点,实现及时会话事务控制问题。

Description

用于实现数据库读写负载均衡的方法及其***
技术领域
本发明涉及数据库负载均衡的技术领域,更具体地说是指用于实现数据库读写负载均衡的方法及其***。
背景技术
一般情况下,业界部署数据库的时候都会对做一主多从备份或者多节点共享存储,以保证数据安全。但是,用于数据库备份的从节点不对应用提供服务,白白浪费了数据库资源,通过读写分离功能,能够将数据库的从节点暴露给应用***,一是能提高数据库的利用率,再是可以提升应用***访问数据库的性能。
采用读写分离要求应用***进行改造,需要应用***能够链接到集群内的所有节点,并且要求能区分读写SQL类型和数据库集群内主从节点状态,这导致应用开发与数据库偶合,增加了应用开发难度,同时数据库主从节点故障切换及动态扩缩节点难度大大提升,需要应用感知并且需要协调多个应用同步操作。
中国专利CN201110457793.6公开了一种数据读写分离机制的实现方法和装置。在读操作的SQL访问请求中设置HINT信息,该HINT信息指示读写分离策略,包括对接收到的SQL访问请求进行解析,判断当前的操作类型;若当前的操作类型为写操作,建立与主数据库的连接,向主数据库中写入数据;若当前的操作类型为读操作,根据SQL访问请求中的HINT信息获取当前的读写分离策略,并获取从数据库相对于主数据库的同步延时信息,以及,根据当前的读写分离策略和同步延时信息执行读操作。上述的方案能够在从库出现延时的情况下读取到所需的可信任数据,且较好地兼容了现有的***资源,提高了资源的利用率。
上述的专利解决数据库集群内主从节点读写分离代理访问的问题,该方法仍需要应用改造SQL,并且设置时延要求,未能解决应用与数据库偶合的问题;同时缺乏根据节点中间件性能进行权重控制,及未解决会话事务控制问题。
因此,有必要设计一种用于实现数据库读写均衡方法,实现极大简化应用***开发难度,通过读写负载提升数据库的访问能力,支持根据节点权重进行负载均衡以及支持数据库集群动态增删节点,实现及时会话事务控制问题。
发明内容
本发明的目的在于克服现有技术的缺陷,提供用于实现数据库读写负载均衡的方法及其***。
为实现上述目的,本发明采用以下技术方案:用于实现数据库读写负载均衡的方法,所述方法包括:
获取MySQL报文;
对所述MySQL报文进行解析,获取具体的SQL语句;
判断SQL语句是否携带HINT信息;
若SQL语句携带HINT信息,则对SQL语句的平衡值的判断,获取SQL语句的读写属性,并进入最后一步骤;
若SQL语句不携带HINT信息,则解析SQL逻辑,根据解析的结果获取SQL语句的读写属性,并进入最后一步骤;
当读写属性为读时,根据从节点的权重读取数据,当读写属性为写时,向写节点写入数据。
其进一步技术方案为:若SQL语句携带HINT信息,则根据SQL语句内的控制语句进行读写分配的步骤,包括以下具体步骤:
获取SQL语句内的平衡值;
根据所述平衡值判断所述SQL语句是否发往数据库写节点;
若是发往数据库写节点,则SQL语句的属性为写属性;
若不是发往数据库写节点,则SQL语句的属性为读属性。
其进一步技术方案为:若SQL语句不携带HINT信息,则解析SQL逻辑,根据解析的结果获取SQL语句的读写属性的步骤,包括以下具体步骤:
获取SQL语句的SQL文本;
解析所述SQL文本,判断所述SQL文本是否是读语句;
若是读语句,则发往数据库读节点,SQL语句的读写属性为读属性;
若不是读语句,则发往数据库写节点,SQL语句的读写属性为写属性。
其进一步技术方案为:当读写属性为读时,根据从节点的权重读取数据的步骤,包括以下具体步骤:
获取各从节点的权重比例;
根据所述权重比例,获取从节点链接;
向所述从节点查询数据,并反馈查询的结果。
其进一步技术方案为:当读写属性为写时,向写节点写入数据的步骤,包括以下具体步骤:
根据会话情况获取写节点链接;
向所述写节点写入数据,并返回结果。
其进一步技术方案为:所述方法还包括:
主从节点关系发生变化,由已完成同步的从节点提升为主节点;
通过SQL语句检测到数据库状态的变化后,重新初始化后端的链接。
其进一步技术方案为:所述方法还包括:
从节点数量发生变化时,通过SQL语句检测从节点的数量以及从节点的链接信息,重新初始化后端从节点的链接。
本发明还提供了用于实现数据库读写负载均衡的***,包括获取单元、解析获取单元、判断单元、HINT处理单元、SQL逻辑解析单元以及读写处理单元;
所述获取单元,用于获取MySQL报文;
所述解析获取单元,用于对所述MySQL报文进行解析,获取具体的SQL语句;
所述判断单元,用于判断SQL语句是否携带HINT信息;
所述HINT处理单元,用于若SQL语句携带HINT信息,则对SQL语句的平衡值的判断,获取SQL语句的读写属性;
所述SQL逻辑解析单元,用于若SQL语句不携带HINT信息,则解析SQL逻辑,根据解析的结果获取SQL语句的读写属性;
所述读写处理单元,用于当读写属性为读时,根据从节点的权重读取数据,当读写属性为写时,向写节点写入数据。
其进一步技术方案为:所述HINT处理单元更包括平衡值获取模块以及平衡值判断模块;
所述平衡值获取模块,用于获取SQL语句内的平衡值;
所述平衡值判断模块,用于根据所述平衡值判断所述SQL语句是否发往数据库写节点;若是发往数据库写节点,则SQL语句的属性为写属性;若不是发往数据库写节点,则SQL语句的属性为读属性。
其进一步技术方案为:所述SQL逻辑解析单元包括文本获取模块以及解析文本模块;
所述文本获取模块,用于获取SQL语句的SQL文本;
所述解析文本模块,用于解析所述SQL文本,判断所述SQL文本是否是读语句;若是读语句,则发往数据库读节点,SQL语句的读写属性为读属性;若不是读语句,则发往数据库写节点,SQL语句的读写属性为写属性。
本发明与现有技术相比的有益效果是:本发明的用于实现数据库读写负载均衡的方法,通过对MySQL报文解析获取SQL语句,对SQL语句进行判断,根据判断结果进行读写分配,读取数据时,按照权重比例读取数据,达到数据库读写负载均衡的效果,应用无需关系数据库读写节点地址和端口,实现极大简化应用***开发难度,通过读写负载提升数据库的访问能力,支持根据节点权重进行负载均衡以及支持数据库集群动态增删节点,实现及时会话事务控制问题。
下面结合附图和具体实施例对本发明作进一步描述。
附图说明
图1为本发明具体实施例提供的用于实现数据库读写负载均衡的方法的流程图;
图2为本发明具体实施例提供的根据SQL语句内的控制语句进行读写分配的具体流程图;
图3为本发明具体实施例提供的解析SQL逻辑并根据解析的结果获取SQL语句的读写属性的具体流程图;
图4为本发明具体实施例提供的当读写属性为读时根据从节点的权重读取数据的具体流程图;
图5为本发明具体实施例提供的当读写属性为写时向写节点写入数据的具体流程图;
图6为本发明具体实施例提供的用于实现数据库读写负载均衡的***的结构框图;
图7为本发明具体实施例提供的HINT处理单元的结构框图;
图8为本发明具体实施例提供的SQL逻辑解析单元的结构框图;
图9为本发明具体实施例提供的读写处理单元的结构框图。
具体实施方式
为了更充分理解本发明的技术内容,下面结合具体实施例对本发明的技术方案进一步介绍和说明,但不局限于此。
如图1~9所示的具体实施例,本实施例提供的用于实现数据库读写负载均衡的方法,可以运用在数据库的写入数据或者查询读取数据的过程中,实现极大简化应用***开发难度,通过读写负载提升数据库的访问能力,支持根据节点权重进行负载均衡以及支持数据库集群动态增删节点,实现及时会话事务控制问题。
本方法具体是基于NIO实现数据库读写负载均衡,NIO是New IO的简称,在jdk1.4里提供的新api。Sun官方标榜的特性如下:为所有的原始类型提供(Buffer)缓存支持。字符集编码解码解决方案。Channel:一个新的原始I/O抽象。支持锁和内存映射文件的文件访问接口。提供多路(non-bloking)非阻塞式的高伸缩性网络I/O。
如图1所示,是本实施例提供的用于实现数据库读写负载均衡的方法,该方法包括:
S1、获取MySQL报文;
S2、对所述MySQL报文进行解析,获取具体的SQL语句;
S3、判断SQL语句是否携带HINT信息;
S4、若SQL语句携带HINT信息,则对SQL语句的平衡值的判断,获取SQL语句的读写属性,并进入S6步骤;
S5、若SQL语句不携带HINT信息,则解析SQL逻辑,根据解析的结果获取SQL语句的读写属性,并进入S6步骤;
S6、当读写属性为读时,根据从节点的权重读取数据,当读写属性为写时,向写节点写入数据。
上述的用于实现数据库读写负载均衡的方法可以支持应用透明读写分离和应用级读写分离方案,可根据业务需要灵活调整,有效提高读写性能,支持数据库集群动态增删节点。
其中,应用透明读写负载:在数据库代理层上设置读写负载策略,默认无事务写SQL在写节点执行,读SQL在读节点执行;事务内读写SQL都在写节点执行。
应用级读写负载:由应用在编写的SQL语句前面加上HINT信息,/*!HINT({"balance":"w"})*/SQL表示该语句发往写节点;/*!HINT({"balance":"r"})*/SQL表示该语句发往读节点;若SQL前面有HINT信息,则由HINT内容控制读写负载策略,忽略应用透明读写负载的策略。
对于S1步骤,具体是获取MySQL的二进制流报文。
更进一步的,对于S2步骤,具体是代理层获取MySQL报文后,根据MySQL规定的报文协议进行解析,获取具体的SQL语句。
S3步骤,判断SQL语句是否携带HINT信息,主要是为了区分应用透明读写分离和应用级读写分离方案,根据不同的方案进行读写分离,另外,此过程应用无需关心数据库读写节点地址和端口,极大简化应用***开发难度,同时通过读写负载提升数据库的访问能力。
对于S4步骤,若SQL语句携带HINT信息,则根据SQL语句内的控制语句进行读写分配的步骤,包括以下具体步骤:
S41、获取SQL语句内的平衡值;
S42、根据所述平衡值判断所述SQL语句是否发往数据库写节点;
S43、若是发往数据库写节点,则SQL语句的属性为写属性;
S44、若不是发往数据库写节点,则SQL语句的属性为读属性。
上述的S41步骤,当SQL语句携带HINT信息,则该负载为应用级读写负载:SQL语句为/*!HINT({"balance":"w"})*/SQL,或者/*!HINT({"balance":"r"})*/SQL,获取上述SQL语句的balance值。
上述的S42步骤,当SQL语句为/*!HINT({"balance":"w"})*/SQL,表示该语句发往写节点;SQL语句为/*!HINT({"balance":"r"})*/SQL表示该语句发往读节点。
对于S5步骤,若SQL语句不携带HINT信息,则解析SQL逻辑,根据解析的结果获取SQL语句的读写属性的步骤,包括以下具体步骤:
S51、获取SQL语句的SQL文本;
S52、解析所述SQL文本,判断所述SQL文本是否是读语句;
S53、若是读语句,则发往数据库读节点,SQL语句的读写属性为读属性;
S54、若不是读语句,则发往数据库写节点,SQL语句的读写属性为写属性。
对于上述的S51步骤至S54步骤,数据库代理层上设置读写负载策略,默认无事务写SQL语句在写节点执行,读SQL语句在读节点执行;事务内读写SQL语句都在写节点执行。
对于S6步骤中的当读写属性为读时,根据从节点的权重读取数据的步骤,包括以下具体步骤:
S61、获取各从节点的权重比例;
S62、根据所述权重比例,获取从节点链接;
S63、向所述从节点查询数据,并反馈查询的结果。
对于S61步骤,MySQL数据库在部署的时候一般会采用一主多从的部署模式,通过为每个从节点配置权重,可以为读写分离的读语句提供负载均衡,例如一组数据库集群有一主三从,为三个从节点分别配置负载均衡权重为100、200、300。
S62步骤,具体的,代理层获取到从节点权重信息后,每次需要执行查询语句时会根据权重比例:100:200:300的情况随机获取一个从节点链接,并执行具体的语句。
对于S6步骤中的当读写属性为写时,向写节点写入数据的步骤,包括以下具体步骤:
S64、根据会话情况获取写节点链接;
S65、向所述写节点写入数据,并返回结果。
由于写入数据时只有一个节点,因此,无需权重控制,减少写入数据的时间,提高写入的速率。
更进一步的,上述的用于实现数据库读写负载均衡的方法还包括:
主从节点关系发生变化,由已完成同步的从节点提升为主节点;
通过SQL语句检测到数据库状态的变化后,重新初始化后端的链接。
另外,上述的用于实现数据库读写负载均衡的方法还包括:从节点数量发生变化时,通过SQL语句检测从节点的数量以及从节点的链接信息,重新初始化后端从节点的链接。
上述的主从节点关系发生变化的步骤以及从节点数量发生变化的步骤均可以单独使用,作为支持数据库集群动态增删节点的方法。
上述的用于实现数据库读写负载均衡的方法,通过对MySQL报文解析获取SQL语句,对SQL语句进行判断,根据判断结果进行读写分配,读取数据时,按照权重比例读取数据,达到数据库读写负载均衡的效果,应用无需关系数据库读写节点地址和端口,实现极大简化应用***开发难度,通过读写负载提升数据库的访问能力,支持根据节点权重进行负载均衡以及支持数据库集群动态增删节点,实现及时会话事务控制问题。
如图6所示,本实施例还提供了用于实现数据库读写负载均衡的***,包括获取单元10、解析获取单元20、判断单元30、HINT处理单元40、SQL逻辑解析单元50以及读写处理单元60。
获取单元10,用于获取MySQL报文。
解析获取单元20,用于对所述MySQL报文进行解析,获取具体的SQL语句。
判断单元30,用于判断SQL语句是否携带HINT信息。
HINT处理单元40,用于若SQL语句携带HINT信息,则对SQL语句的平衡值的判断,获取SQL语句的读写属性。
SQL逻辑解析单元50,用于若SQL语句不携带HINT信息,则解析SQL逻辑,根据解析的结果获取SQL语句的读写属性。
读写处理单元60,用于当读写属性为读时,根据从节点的权重读取数据,当读写属性为写时,向写节点写入数据。
上述的***可以支持应用透明读写分离和应用级读写分离方案,可根据业务需要灵活调整,有效提高读写性能,支持数据库集群动态增删节点。
其中,应用透明读写负载:在数据库代理层上设置读写负载策略,默认无事务写SQL在写节点执行,读SQL在读节点执行;事务内读写SQL都在写节点执行。
应用级读写负载:由应用在编写的SQL语句前面加上HINT信息,/*!HINT({"balance":"w"})*/SQL表示该语句发往写节点;/*!HINT({"balance":"r"})*/SQL表示该语句发往读节点;若SQL前面有HINT信息,则由HINT内容控制读写负载策略,忽略应用透明读写负载的策略。
对于获取单元10,具体是获取MySQL的二进制流报文。
对于解析获取单元20,具体是代理层获取MySQL报文后,根据MySQL规定的报文协议进行解析,获取具体的SQL语句。
判断单元30主要是为了区分应用透明读写分离和应用级读写分离方案,根据不同的方案进行读写分离,另外,此过程应用无需关心数据库读写节点地址和端口,极大简化应用***开发难度,同时通过读写负载提升数据库的访问能力。
上述的HINT处理单元40更包括平衡值获取模块41以及平衡值判断模块42。
平衡值获取模块41,用于获取SQL语句内的平衡值。
平衡值判断模块42,用于根据所述平衡值判断所述SQL语句是否发往数据库写节点;若是发往数据库写节点,则SQL语句的属性为写属性;若不是发往数据库写节点,则SQL语句的属性为读属性。
当SQL语句携带HINT信息,则该负载为应用级读写负载:SQL语句为/*!HINT({"balance":"w"})*/SQL,或者/*!HINT({"balance":"r"})*/SQL,平衡值获取模块41获取上述SQL语句的balance值。
平衡值判断模块42判断的结果如下:
当SQL语句为/*!HINT({"balance":"w"})*/SQL,表示该语句发往写节点;SQL语句为/*!HINT({"balance":"r"})*/SQL表示该语句发往读节点。
更进一步的,SQL逻辑解析单元50包括文本获取模块51以及解析文本模块52。
文本获取模块51,用于获取SQL语句的SQL文本。
解析文本模块52,用于解析所述SQL文本,判断所述SQL文本是否是读语句;若是读语句,则发往数据库读节点,SQL语句的读写属性为读属性;若不是读语句,则发往数据库写节点,SQL语句的读写属性为写属性。
上述的文本获取模块51以及解析文本模块52,数据库代理层上设置读写负载策略,默认无事务写SQL语句在写节点执行,读SQL语句在读节点执行;事务内读写SQL语句都在写节点执行。
另外,上述的读写处理单元60包括获取权重模块61、从节点链接获取模块62、读取模块63、写节点链接获取模块64以及写入模块65。
获取权重模块61,用于获取各从节点的权重比例。
从节点链接获取模块62,用于根据所述权重比例,获取从节点链接。
读取模块63,用于向所述从节点查询数据,并反馈查询的结果。
写节点链接获取模块64,用于根据会话情况获取写节点链接。
写入模块65,用于向所述写节点写入数据,并返回结果。
对于获取权重模块61,MySQL数据库在部署的时候一般会采用一主多从的部署模式,通过为每个从节点配置权重,可以为读写分离的读语句提供负载均衡,例如一组数据库集群有一主三从,为三个从节点分别配置负载均衡权重为100、200、300。
对于从节点链接获取模块62而言,具体的,代理层获取到从节点权重信息后,每次需要执行查询语句时会根据权重比例:100:200:300的情况随机获取一个从节点链接,并执行具体的语句。
由于写入数据时只有一个节点,因此,写节点链接获取模块64无需权重控制,减少写入数据的时间,提高写入的速率。
更进一步的,上述的用于实现数据库读写负载均衡的***还包括:从节点提升单元70以及初始化单元80。
从节点提升单元70,用于主从节点关系发生变化,由已完成同步的从节点提升为主节点。
初始化单元80,用于通过SQL语句检测到数据库状态的变化后,重新初始化后端的链接。
另外,上述的用于实现数据库读写负载均衡的***还包括检测重置单元90。
检测重置单元90,用于从节点数量发生变化时,通过SQL语句检测从节点的数量以及从节点的链接信息,重新初始化后端从节点的链接。
上述的从节点提升单元70、初始化单元80以及检测重置单元90均可以单独使用,作为支持数据库集群动态增删节点的方法。
上述的用于实现数据库读写负载均衡的***,通过获取单元10对MySQL报文解析获取SQL语句,判断单元30对SQL语句进行判断,根据判断结果进行读写分配,读取数据时,按照权重比例读取数据,达到数据库读写负载均衡的效果,应用无需关系数据库读写节点地址和端口,实现极大简化应用***开发难度,通过读写负载提升数据库的访问能力,支持根据节点权重进行负载均衡以及支持数据库集群动态增删节点,实现及时会话事务控制问题。
上述仅以实施例来进一步说明本发明的技术内容,以便于读者更容易理解,但不代表本发明的实施方式仅限于此,任何依本发明所做的技术延伸或再创造,均受本发明的保护。本发明的保护范围以权利要求书为准。

Claims (2)

1.用于实现数据库读写负载均衡的方法,其特征在于,所述方法包括:
获取MySQL报文;
对所述MySQL报文进行解析,获取具体的SQL语句;
判断SQL语句是否携带HINT信息;
若SQL语句携带HINT信息,则对SQL语句的平衡值进行判断,获取SQL语句的读写属性;
当读写属性为读时,根据从节点的权重读取数据,当读写属性为写时,向写节点写入数据;
若SQL语句不携带HINT信息,则解析SQL逻辑,根据解析的结果获取SQL语句的读写属性,并进入所述当读写属性为读时,根据从节点的权重读取数据,当读写属性为写时,向写节点写入数据;
若SQL语句携带HINT信息,则对SQL语句的平衡值进行判断,获取SQL语句的读写属性的步骤,包括以下具体步骤:
获取SQL语句内的平衡值;
根据所述平衡值判断所述SQL语句是否发往数据库写节点;
若是发往数据库写节点,则SQL语句的属性为写属性;
若不是发往数据库写节点,则SQL语句的属性为读属性;
若SQL语句不携带HINT信息,则解析SQL逻辑,根据解析的结果获取SQL语句的读写属性的步骤,包括以下具体步骤:
获取SQL语句的SQL文本;
解析所述SQL文本,判断所述SQL文本是否是读语句;
若是读语句,则发往数据库读节点,SQL语句的读写属性为读属性;
若不是读语句,则发往数据库写节点,SQL语句的读写属性为写属性;
当读写属性为读时,根据从节点的权重读取数据的步骤,包括以下具体步骤:
获取各从节点的权重比例;
根据所述权重比例,获取从节点链接;
向所述从节点查询数据,并反馈查询的结果;
当读写属性为写时,向写节点写入数据的步骤,包括以下具体步骤:
根据会话情况获取写节点链接;
向所述写节点写入数据,并返回结果;
所述方法还包括:
主从节点关系发生变化,由已完成同步的从节点提升为主节点;
通过SQL语句检测到数据库状态的变化后,重新初始化后端的链接;
所述方法还包括:
从节点数量发生变化时,通过SQL语句检测从节点的数量以及从节点的链接信息,重新初始化后端从节点的链接;
在数据库代理层上设置读写负载策略,默认无事务写SQL在写节点执行,读SQL在读节点执行;事务内读写SQL都在写节点执行。
2.用于实现数据库读写负载均衡的***,所述***适用于权利要求1所述的用于实现数据库读写负载均衡的方法,其特征在于,包括获取单元、解析获取单元、判断单元、HINT处理单元、SQL逻辑解析单元以及读写处理单元;
所述获取单元,用于获取MySQL报文;
所述解析获取单元,用于对所述MySQL报文进行解析,获取具体的SQL语句;
所述判断单元,用于判断SQL语句是否携带HINT信息;
所述HINT处理单元,用于若SQL语句携带HINT信息,则对SQL语句的平衡值进行判断,获取SQL语句的读写属性;
所述SQL逻辑解析单元,用于若SQL语句不携带HINT信息,则解析SQL逻辑,根据解析的结果获取SQL语句的读写属性;
所述读写处理单元,用于当读写属性为读时,根据从节点的权重读取数据,当读写属性为写时,向写节点写入数据;
所述HINT处理单元更包括平衡值获取模块以及平衡值判断模块;
所述平衡值获取模块,用于获取SQL语句内的平衡值;
所述平衡值判断模块,用于根据所述平衡值判断所述SQL语句是否发往数据库写节点;若是发往数据库写节点,则SQL语句的属性为写属性;若不是发往数据库写节点,则SQL语句的属性为读属性;
所述SQL逻辑解析单元包括文本获取模块以及解析文本模块;
所述文本获取模块,用于获取SQL语句的SQL文本;
所述解析文本模块,用于解析所述SQL文本,判断所述SQL文本是否是读语句;若是读语句,则发往数据库读节点,SQL语句的读写属性为读属性;若不是读语句,则发往数据库写节点,SQL语句的读写属性为写属性。
CN201710234568.3A 2017-04-11 2017-04-11 用于实现数据库读写负载均衡的方法及其*** Active CN107066575B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710234568.3A CN107066575B (zh) 2017-04-11 2017-04-11 用于实现数据库读写负载均衡的方法及其***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710234568.3A CN107066575B (zh) 2017-04-11 2017-04-11 用于实现数据库读写负载均衡的方法及其***

Publications (2)

Publication Number Publication Date
CN107066575A CN107066575A (zh) 2017-08-18
CN107066575B true CN107066575B (zh) 2021-01-15

Family

ID=59601976

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710234568.3A Active CN107066575B (zh) 2017-04-11 2017-04-11 用于实现数据库读写负载均衡的方法及其***

Country Status (1)

Country Link
CN (1) CN107066575B (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110019312B (zh) * 2017-12-29 2021-05-04 ***通信集团山西有限公司 读写数据分离调度方法、装置、设备及介质
CN110781214A (zh) * 2019-09-26 2020-02-11 金蝶软件(中国)有限公司 数据库读写方法、装置、计算机设备和存储介质
CN111459677A (zh) * 2020-04-01 2020-07-28 北京顺达同行科技有限公司 请求分配方法、装置、计算机设备和存储介质
CN112416576A (zh) * 2020-11-04 2021-02-26 北京人大金仓信息技术股份有限公司 一种数据库负载均衡的方法及装置
CN115098573A (zh) * 2022-06-20 2022-09-23 上海爱可生信息技术股份有限公司 实现数据库读写分离的方法
CN115470303B (zh) * 2022-11-14 2023-03-03 苏州浪潮智能科技有限公司 一种数据库访问方法、装置、***、设备及可读存储介质
CN117573372B (zh) * 2024-01-12 2024-03-15 北京浩瀚深度信息技术股份有限公司 一种基于反馈信号的提升数据入库性能的负载均衡方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102591964A (zh) * 2011-12-30 2012-07-18 北京新媒传信科技有限公司 数据读写分离机制的实现方法和装置
CN102810116A (zh) * 2012-06-29 2012-12-05 安科智慧城市技术(中国)有限公司 一种基于数据库连接的自动路由和负载均衡的方法及***
CN104063425A (zh) * 2014-06-04 2014-09-24 五八同城信息技术有限公司 通过数据库中间件查询数据的方法和数据库中间件
CN106126600A (zh) * 2016-06-21 2016-11-16 浪潮电子信息产业股份有限公司 一种执行读写分离的方法、装置及***

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9690829B2 (en) * 2013-04-15 2017-06-27 Vmware, Inc. Dynamic load balancing during distributed query processing using query operator motion

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102591964A (zh) * 2011-12-30 2012-07-18 北京新媒传信科技有限公司 数据读写分离机制的实现方法和装置
CN102810116A (zh) * 2012-06-29 2012-12-05 安科智慧城市技术(中国)有限公司 一种基于数据库连接的自动路由和负载均衡的方法及***
CN104063425A (zh) * 2014-06-04 2014-09-24 五八同城信息技术有限公司 通过数据库中间件查询数据的方法和数据库中间件
CN106126600A (zh) * 2016-06-21 2016-11-16 浪潮电子信息产业股份有限公司 一种执行读写分离的方法、装置及***

Also Published As

Publication number Publication date
CN107066575A (zh) 2017-08-18

Similar Documents

Publication Publication Date Title
CN107066575B (zh) 用于实现数据库读写负载均衡的方法及其***
CN111475469B (zh) Kubernetes用户态应用中基于虚拟文件***的小文件存储优化***
US9864759B2 (en) System and method for providing scatter/gather data processing in a middleware environment
CN102316043B (zh) 端口虚拟化方法、交换机及通信***
CN111431757B (zh) 虚拟网络的流量采集方法及装置
CN105187512A (zh) 一种虚拟机集群负载均衡方法及***
CN104598257A (zh) 远程应用程序运行的方法和装置
CN105677251B (zh) 基于Redis集群的存储***
US10838977B2 (en) Key-value replication with consensus protocol
EP2740255A1 (en) Hardware failure mitigation
CN102194009A (zh) 一种数据库托管方法和一种数据库托管平台***
CN112148430A (zh) 一种虚拟网络功能的虚拟机在线安全迁移的方法
CN109240800B (zh) 一种基于Hypervisor多***共享内存的管理方法
Mallon et al. Are today's sdn controllers ready for primetime?
CN103634269A (zh) 单点登录***及方法
CN112202862B (zh) 一种基于kafka的集群数据以及文件的同步方法及装置
EP3631639B1 (en) Communications for field programmable gate array device
CN113900939A (zh) 测试环境访问方法、装置、可读存储介质和计算机设备
CN103810038A (zh) 一种ha集群中虚拟机存储文件迁移方法及其装置
CN104102550A (zh) 一种多主机进程间通信的方法
CN110795209B (zh) 一种控制方法和装置
US9438638B2 (en) Method for transparently connecting augmented network socket operations
CN116962441A (zh) 云存储控制方法、装置及云存储***
Liu et al. A high performance, scalable dns service for very large scale container cloud platforms
CN102970191A (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
GR01 Patent grant
GR01 Patent grant