全网唯一标准王
(19)国家知识产权局 (12)发明 专利申请 (10)申请公布号 (43)申请公布日 (21)申请 号 202210699612.9 (22)申请日 2022.06.20 (71)申请人 上海爱可生信息技 术股份有限公司 地址 201203 上海市浦东 新区中国 (上海) 自由贸易试验区郭守敬路498号浦东 软件园14幢2 2301-190室 (72)发明人 傅文辉 黄炎 周文雅  (74)专利代理 机构 上海思捷知识产权代理有限 公司 312 95 专利代理师 竹励萍 (51)Int.Cl. G06F 16/25(2019.01) G06F 16/28(2019.01) (54)发明名称 实现数据库读写分离的方法 (57)摘要 本发明提供了一种实现数据库读写分离的 方法, 包括: 读写分离中间件分别和主数据库和 从数据库建立连接池; 读写分离中间件和客户端 建立连接, 并接收客户端的SQL请求; 通过数据库 和客户端交互协议提取并保存SQL请求的属性、 读写分离中间件和客户端的会话状态、 以及SQL 请求对会话状态的影响; 根据属性、 会话状态以 及对会话状态的影响转发到与主数据库的连接 或与从数据库的连接; 其中, 当进入特定会话状 态时, 固定当前会话的连接; 当连接更新时, 读写 分离中间件根据会话状态设置新的连接, 以使 得 新的连接和当前会话的连接相同。 本发明可以更 为准确地将客户端的请求转化到对应的连接, 在 更改会话状态时, 仍然可以执行读写分离并且 得 到正确的结果。 权利要求书1页 说明书5页 附图1页 CN 115098573 A 2022.09.23 CN 115098573 A 1.一种实现数据库读写分离的方法, 其特 征在于, 包括: 读写分离中间件分别和主数据库和从数据库建立连接池; 读写分离中间件和客户端建立连接, 并从所述 客户端获取SQ L请求; 通过数据库和客户端交互协议, 读写分离中间件提取并保存所述SQL请求的属性、 读写 分离中间件和客户端的会话状态以及对所述会话状态的影响; 根据所述属性、 会话状态以及对所述会话状态 的影响将所述SQL请求转发到与主数据 库的连接或与从数据库的连接; 以及 其中, 当所述读写分离中间件和客户端进入特定会话状态时, 固定当前会话的连接; 当 与所述主 数据库或者与所述从数据库的连接更新时, 所述读写分离中间件根据所述会话状 态设置新的连接, 以使得 所述新的连接和当前会话的连接相同。 2.如权利要求1所述的实现数据库读写分离的方法, 其特征在于, 所述读写分离 中间件 和主数据库的连接池 包括若干个连接 。 3.如权利要求1所述的实现数据库读写分离的方法, 其特征在于, 所述读写分离 中间件 和从数据库的连接池 包括若干个连接 。 4.如权利要求1所述的实现数据库读写分离的方法, 其特征在于, 所述读写分离 中间件 和客户端的会话状态包括: 会话是否在事务或只读事务中; 会话是否使用了自动提交模式; 以及 默认数据库、 用户变量和系统变量的变更内容。 5.如权利要求1所述的实现数据库读写分离的方法, 其特 征在于, 所述会话状态包括: 是否创建或删除了临时表; 是否创建、 调用或删除了预处 理语句; 以及 是否执行上锁或解锁操作。 6.如权利要求1所述的实现数据库读写分离的方法, 其特征在于, 所述特定会话状态包 括: 会话于事务或只读事务中; 会话拥有临时表; 和/或 会话执行过上锁操作, 处于上锁状态。 7.如权利要求6所述的实现数据库读写分离的方法, 其特征在于, 固定当前会话的连接 后, SQL请求都转发到当前 连接执行, 直到会话从所述特定会话状态解除。 8.如权利要求1所述的实现数据库读写分离的方法, 其特征在于, 所述读写分离 中间件 根据所述会话状态设置新的连接的方法包括: 在新的连接上设置默认数据库、 用户变量、 系统变量和预处 理语句。 9.如权利要求1所述的实现数据库读写分离的方法, 其特征在于, 根据所述属性、 会话 状态以及 对所述会话状态的影响将所述SQL请求转 发到与主 数据库的连接或与从数据库的 连接之后, 还 包括: 在连接使用完毕后, 读写分离中间件清空连接上的会话状态。权 利 要 求 书 1/1 页 2 CN 115098573 A 2实现数据库读写分离的方 法 技术领域 [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]然而, 这种单纯地判断S QL语句属性, 并转发的方法, 存在以下缺点: 1、 当存在特殊 的会话状态, 如: 临时表、 事务或只读事务时, 仅凭SQL语句属性并不能得出正确的转发方 向。 例如临时表只在 主库连接上存在, 涉及临时表的读取, 应当转 发主库; 2、 SQL请求可能会 改变会话状态, 当读写分离中间件前后使用不同的连接时, 会话状态会丢失。 读写分离中间 件无法支持依赖会话状态的SQ L请求, 将拒绝执 行, 或虽然执 行但无法得到正确的结果。 发明内容 [0005]本发明的目的在于提供一种实现数据库读写分离的方法, 在转发客户端的SQL请 求时, 将会话状态 考虑到其中, 从而 可以更为准确地将客户端的请求转化到对应的连接, 并 且在更改会话状态时, 仍然可以执 行读写分离并且得到正确的结果。 [0006]为了达到上述目的, 本发明提供了一种实现数据库读写分离的方法, 包括: [0007]读写分离中间件分别和主数据库和从数据库建立连接池; [0008]读写分离中间件和客户端建立连接, 并从所述 客户端获取SQ L请求; [0009]通过数据库和客户端交互协议, 读写分离中间件提取 并保存所述SQL请求的属性、 读写分离中间件和客户端的会话状态以及对所述会话状态的影响; [0010]根据所述属性、 会话状态以及对所述会话状态的影响将所述SQL请求转发到与主 数据库的连接或与从数据库的连接; 以及说 明 书 1/5 页 3 CN 115098573 A 3

PDF文档 专利 实现数据库读写分离的方法

文档预览
中文文档 8 页 50 下载 1000 浏览 0 评论 0 收藏 3.0分
温馨提示:本文档共8页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
专利 实现数据库读写分离的方法 第 1 页 专利 实现数据库读写分离的方法 第 2 页 专利 实现数据库读写分离的方法 第 3 页
下载文档到电脑,方便使用
本文档由 SC 于 2024-02-24 01:02:27上传分享
友情链接
站内资源均来自网友分享或网络收集整理,若无意中侵犯到您的权利,敬请联系我们微信(点击查看客服),我们将及时删除相关资源。