实现数据库读写分离的方法技术

技术编号:35027544 阅读:31 留言:0更新日期:2022-09-24 23:00
本发明专利技术提供了一种实现数据库读写分离的方法,包括:读写分离中间件分别和主数据库和从数据库建立连接池;读写分离中间件和客户端建立连接,并接收客户端的SQL请求;通过数据库和客户端交互协议提取并保存SQL请求的属性、读写分离中间件和客户端的会话状态、以及SQL请求对会话状态的影响;根据属性、会话状态以及对会话状态的影响转发到与主数据库的连接或与从数据库的连接;其中,当进入特定会话状态时,固定当前会话的连接;当连接更新时,读写分离中间件根据会话状态设置新的连接,以使得新的连接和当前会话的连接相同。本发明专利技术可以更为准确地将客户端的请求转化到对应的连接,在更改会话状态时,仍然可以执行读写分离并且得到正确的结果。到正确的结果。到正确的结果。

【技术实现步骤摘要】
实现数据库读写分离的方法


[0001]本专利技术涉及数据库领域,尤其是涉及一种实现数据库读写分离的方法。

技术介绍

[0002]MySQL作为一种主流的关系型数据库,在互联网行业广泛应用,在面对数据量大、业务复杂和响应延时要求高等问题时,通过使用数据库集群可以使读写分离,提高数据库的系统性能。数据库集群通常包括一个主数据库和至少一个从数据库,其中主数据库负责数据的写入,从数据库负责数据的读取,从数据库从主数据库备份数据。而数据库的读写需要读写分离中间件系统。
[0003]现有的数据库读写分离中间件系统,例如Amoeba等,只是单纯的根据客户端请求的属性,转发到主数据库或从数据库的连接上。其中典型的流程是:读写分离中间件和后端主从数据库建立连接池;读写分离中间件和客户端建立连接;读写分离中间件收到客户端SQL请求;根据SQL请求的属性,选择合适的后端连接(与主数据库的连接或与从数据库的连接),并转发请求;收到后端数据库执行完毕返回的结果后,将结果转发到客户端。例如:现有读写分离中间件X连接一组主从数据库,主数据库DB1负责处理写入请求,从数据库DB2负责处理读取请求。读写分离中间件X收到的来自客户端的SQL请求1,解析处理其中的SQL语句,本次为读语句,则从连接池中获取一根DB2的连接,转发请求1。DB2执行完成后,将执行结果发送给X,X再将结果转发给客户端。最后将DB2连接放回连接池。X收到的来自客户端的SQL请求2,本次为写语句,则从连接池中获取一根DB1的连接,并执行如上的后续操作。
[0004]然而,这种单纯地判断SQL语句属性,并转发的方法,存在以下缺点:1、当存在特殊的会话状态,如:临时表、事务或只读事务时,仅凭SQL语句属性并不能得出正确的转发方向。例如临时表只在主库连接上存在,涉及临时表的读取,应当转发主库;2、SQL请求可能会改变会话状态,当读写分离中间件前后使用不同的连接时,会话状态会丢失。读写分离中间件无法支持依赖会话状态的SQL请求,将拒绝执行,或虽然执行但无法得到正确的结果。

技术实现思路

[0005]本专利技术的目的在于提供一种实现数据库读写分离的方法,在转发客户端的SQL请求时,将会话状态考虑到其中,从而可以更为准确地将客户端的请求转化到对应的连接,并且在更改会话状态时,仍然可以执行读写分离并且得到正确的结果。
[0006]为了达到上述目的,本专利技术提供了一种实现数据库读写分离的方法,包括:
[0007]读写分离中间件分别和主数据库和从数据库建立连接池;
[0008]读写分离中间件和客户端建立连接,并从所述客户端获取SQL请求;
[0009]通过数据库和客户端交互协议,读写分离中间件提取并保存所述SQL请求的属性、读写分离中间件和客户端的会话状态以及对所述会话状态的影响;
[0010]根据所述属性、会话状态以及对所述会话状态的影响将所述SQL请求转发到与主数据库的连接或与从数据库的连接;以及
[0011]其中,当所述读写分离中间件和客户端进入特定会话状态时,固定当前会话的连接;当与所述主数据库或者与所述从数据库的连接更新时,所述读写分离中间件根据所述会话状态设置新的连接,以使得所述新的连接和当前会话的连接相同。
[0012]可选的,在所述的实现数据库读写分离的方法中,所述读写分离中间件和主数据库的连接池包括若干个连接。
[0013]可选的,在所述的实现数据库读写分离的方法中,所述读写分离中间件和从数据库的连接池包括若干个连接。
[0014]可选的,在所述的实现数据库读写分离的方法中,所述读写分离中间件和客户端的会话状态包括:
[0015]会话是否在事务或只读事务中;
[0016]会话是否使用了自动提交模式;以及
[0017]默认数据库、用户变量和系统变量的变更内容。
[0018]可选的,在所述的实现数据库读写分离的方法中,所述会话状态包括:
[0019]是否创建或删除了临时表;
[0020]是否创建、调用或删除了预处理语句;以及
[0021]是否执行上锁或解锁操作。
[0022]可选的,在所述的实现数据库读写分离的方法中,所述特定会话状态包括:
[0023]会话处于事务或只读事务中;
[0024]会话拥有临时表;和/或
[0025]会话执行过上锁操作,处于上锁状态。
[0026]可选的,在所述的实现数据库读写分离的方法中,固定当前会话的连接后,SQL请求都转发到当前连接执行,直到会话从所述特定会话状态解除。
[0027]可选的,在所述的实现数据库读写分离的方法中,所述读写分离中间件根据所述会话状态设置新的连接的方法包括:
[0028]在新的连接上设置默认数据库、用户变量、系统变量和预处理语句。
[0029]可选的,在所述的实现数据库读写分离的方法中,根据所述属性、会话状态以及对所述会话状态的影响将所述SQL请求转发到与主数据库的连接或与从数据库的连接之后,还包括:在连接使用完毕后,读写分离中间件清空连接上的会话状态。
[0030]在本专利技术提供的实现数据库读写分离的方法中,将会话状态考虑到了其中,从而更为准确地将客户端的请求转化到了对应的连接,并且在更改会话状态时,仍然执行了读写分离并且得到了正确的结果。
附图说明
[0031]图1是本专利技术实施例的实现数据库读写分离的方法的流程图。
具体实施方式
[0032]下面将结合示意图对本专利技术的具体实施方式进行更详细的描述。根据下列描述,本专利技术的优点和特征将更清楚。需说明的是,附图均采用非常简化的形式且均使用非精准的比例,仅用以方便、明晰地辅助说明本专利技术实施例的目的。
[0033]在下文中,术语“第一”“第二”等用于在类似要素之间进行区分,且未必是用于描述特定次序或时间顺序。要理解,在适当情况下,如此使用的这些术语可替换。类似的,如果本文所述的方法包括一系列步骤,且本文所呈现的这些步骤的顺序并非必须是可执行这些步骤的唯一顺序,且一些所述的步骤可被省略和/或一些本文未描述的其他步骤可被添加到该方法。
[0034]请参照图1,本专利技术提供了一种实现数据库读写分离的方法,包括:
[0035]S11:读写分离中间件分别和主数据库和从数据库建立连接池;
[0036]S12:读写分离中间件和客户端建立连接,并从客户端获取SQL请求;
[0037]S13:通过数据库和客户端交互协议,读写分离中间件提取并保存SQL请求的属性、读写分离中间件和客户端的会话状态以及对会话状态的影响;
[0038]S14:根据属性、会话状态以及对会话状态的影响将SQL请求转发到与主数据库的连接或与从数据库的连接;
[0039]其中,当读写分离中间件和客户端进入特定会话状态时,固定当前会话的连接;当与主数据库或者与从数据库的连接更新时,读写分离中间件根据会话状态设置新的连接,以使得新的连接和当前会话的连接相同。
本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种实现数据库读写分离的方法,其特征在于,包括:读写分离中间件分别和主数据库和从数据库建立连接池;读写分离中间件和客户端建立连接,并从所述客户端获取SQL请求;通过数据库和客户端交互协议,读写分离中间件提取并保存所述SQL请求的属性、读写分离中间件和客户端的会话状态以及对所述会话状态的影响;根据所述属性、会话状态以及对所述会话状态的影响将所述SQL请求转发到与主数据库的连接或与从数据库的连接;以及其中,当所述读写分离中间件和客户端进入特定会话状态时,固定当前会话的连接;当与所述主数据库或者与所述从数据库的连接更新时,所述读写分离中间件根据所述会话状态设置新的连接,以使得所述新的连接和当前会话的连接相同。2.如权利要求1所述的实现数据库读写分离的方法,其特征在于,所述读写分离中间件和主数据库的连接池包括若干个连接。3.如权利要求1所述的实现数据库读写分离的方法,其特征在于,所述读写分离中间件和从数据库的连接池包括若干个连接。4.如权利要求1所述的实现数据库读写分离的方法,其特征在于,所述读写分离中间件和客户端的会话状态包括:会话是否在事务或只读事务中;...

【专利技术属性】
技术研发人员:傅文辉黄炎周文雅
申请(专利权)人:上海爱可生信息技术股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1