全网唯一标准王
(19)国家知识产权局 (12)发明 专利申请 (10)申请公布号 (43)申请公布日 (21)申请 号 202211005365.4 (22)申请日 2022.08.22 (71)申请人 天元大数据信用管理有限公司 地址 250100 山东省济南市高新区浪潮路 1036号浪潮科技园S01楼 23层 (72)发明人 潘玉翠 崔乐乐 米俊达  (74)专利代理 机构 济南信达专利事务所有限公 司 37100 专利代理师 阚恭勇 (51)Int.Cl. G06F 16/25(2019.01) G06F 9/50(2006.01) (54)发明名称 一种用于读写分离集群的数据转发方法 (57)摘要 本发明提供一种用于读写分离集群的数据 转发方法, 属于大数据领域, 本发明通过JDBC实 现将DML语句转发到主节点执行, 在获取执行结 果的同时, 通过全局白名单和事务级白名单保证 事务的一 致性, 保证应用程序的正常运行。 权利要求书2页 说明书3页 附图1页 CN 115455096 A 2022.12.09 CN 115455096 A 1.一种用于读写分离集群的数据转发方法, 其特 征在于, 通过JDBC实现将DML语句转发到主节点执行, 在获取执行结果的同时, 通过全局白名单 和事务级白名单保证事务的一 致性, 保证应用程序的正常运行。 2.根据权利要求1所述的方法, 其特 征在于, 全局白名单: 放置需要强制转发到主库执行的sql所关联的数据库对象(table和 function); 临时白名单: 放置当前事务中, 已经在主库执行的写sql相关的表; 临时白名单中所有 表相关的查询操作都需要转发到主库执 行。 3.根据权利要求1所述的方法, 其特 征在于, DML转发控制器作用的对象是要执 行的SQL, 判断SQ L是否需要转发分为 三步: S1: 当JDBC获取户输入的SQL语句进行解析时, 首先判断SQL是否为写操作, 如果是, 则 判断为DML, 并将该对象记录 到临时白名单, 同时转发至主节点执 行; 反之继续; S2: 在SQL为查询操作的情况下, 则进行判断该SQL语句是否包含全局白名单中定义的 需要强制转发的对象, 如果有, 则判断为DML并转发至主节点执 行; 反之继续; S3: 如果SQL中不包含全局白名单中定义的对象, 则继续判断SQL中是否包含临时白名 单中的对象, 如果有, 则判断为DML并转发至主节点执行; 反之则认为该SQL不需要转发, 直 接在备库执 行。 4.根据权利要求3所述的方法, 其特 征在于, JDBC在获取数据库连接时, 根据用户输入的主节点的连接信息, 通过查询系统表获取 集群各节点的信息, 并将各节点信息加入到负载均衡节点列表中, 然后利用JDBC自身的负 载均衡机制, 对整个节点列 表实现负载均衡, 并根据选定节 点生成数据库连接, 然后返回客 户端。 5.根据权利要求 4所述的方法, 其特 征在于, DML转发过程分为以下两个步骤: 1)应用程序通过JDBC获取数据库连接时, JDBC会同时获取两个连接, 分别连接主库和 备库, 并将两个连接 封装成一个JDBC标准的Co nnection返回客户端; 2)通过JDBC构建执 行语句、 执 行并获取 结果。 6.根据权利要求5所述的方法, 其特 征在于, 客户端通过Connection构建PreparedStatement语句时, JDBC根据传入的SQL语句判断 该语句是否为写操作; 如果SQL为写操作, JDBC会将PreparedStatement的默认连接切换为 主库连接; 如果SQL为读操作, 则维持现有连接不变; 然后调用PreparedStatement的执行方 法执行SQL并获取结果集。 7.根据权利要求5所述的方法, 其特 征在于, 如果客户端使用Statement执行静态SQL, JDBC会在调用Statement的执行方法 时, 根据 要执行的SQL判断该语句是否为写操作; 如果SQL为写操作, JDBC会将Statement的默认连接 切换为主库连接; 如果SQL为读操作, 则维持现有 连接不变; 然后调用Statement的执行方法 执行SQL并获取结果集。 8.根据权利要求 4所述的方法, 其特 征在于, 需要在JDBC中修改的类:权 利 要 求 书 1/2 页 2 CN 115455096 A 21)com.postgresql.jdbc.Driver.makeCo nnection() 将原有的创建连接修改为首先获得集群主节点的连接, 然后 通过该连接获得集群备节 点的相关主机、 端口号, 如果开启了DML转发功能, 还需要获得当前数据库服务的Table和 View的依赖关系, 并缓存到JDBC中; 然后创建主节 点连接, 并通过负载均衡创建一个备节 点 连接; 2)com.postgresql.jdbc.jdbc.PgCo nnection.prepareStatement() 将原有的创建一个预处理statement修改为对开启了DML转发功能的调用, 需要对做预 处理的SQL语句进行处理, 首先需要判断其是否属于写SQL, 如果是, 将其分配给主节点执 行; 如果不是, 那么还需要判断其进 行读操作的表或视图是否在同一事务中有过写操作, 如 果存在写操作, 为了保持事务的一致性, 该条SQL语句也需要由主节点连接去执行, 除此之 外由备节点连接执 行; 3)com.postgresql.jdbc.core.Uti ls makeFunctionList() 对于白名单中的包 含写操作的函数名由此函数进行初始化, 读取配置文件并缓存; isWriteStatement() 判断传入的SQL是否属于写操作, 根据SQL标准其包含写的sql应包含以下类型的SQL语 句: update、 insert、 delete、 drop、 create、 alter、 begin, 同时若sql中包含写操作 函数的, 也应标记为写SQ L; pushDmlTable() 对已经标记为写SQL的, 获取SQL 中被写入的表的名称, 存入临时白名单, 并将依赖于该 表的同样存 入临时白名单; 4)com.postgresql.jdbc.jdbc.PgStatement() 与PgPreparedStatement的逻辑相似, 提供switchSession()函数, 判断SQL的读写类 型, 对于写操作或包含写函数的SQL 发送到主节点执行, 同时将该操作的表名和视图名存入 临时白名单; 对于读操作的表 查看是否存在于临 时白名单中, 即同一事务中, 对某表进行写 操作之后, 所有相关该表的读都切换至主节点连接执行, 对其它的读操作由备节点连接执 行。权 利 要 求 书 2/2 页 3 CN 115455096 A 3

PDF文档 专利 一种用于读写分离集群的数据转发方法

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