java开发ShardingSphere的路由引擎类型示例详解

 更新时间:2022年08月03日 14:10:16   作者:周杰伦本人  
这篇文章主要为大家介绍了java开发ShardingSphere的路由引擎类型示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

ShardingSphere的路由引擎类型

本篇文章源码基于4.0.1版本

上篇文章我们了解到了ShardingSphere在路由流程过程中,根据不同类型的SQL会现在不同的路由引擎,而ShardingSphere支持的路由规则也很多了,包括广播(broadcast)路由、混合(complex)路由、默认数据库(defaultdb)路由、无效(ignore)路由、标准(standard)路由以及单播(unicast)路由等等,那么具体这些路由规则对应的是什么路由引擎呢?今天我们就聊聊这个。

路由引擎类型

RoutingEngineFactory 用来创建路由引擎的实例,对应的是它的newInstance()方法,根据Sql语句SQLStatement对象的类型选择不同的路由引擎,有

全库广播路由引擎DatabaseBroadcastRoutingEngine、

全库表广播路由引擎TableBroadcastRoutingEngine、

无效路由引擎IgnoreRoutingEngine、

默认数据库路由引擎DefaultDatabaseRoutingEngine(对默认的数据库进行路由)、

单播路由引擎UnicastRoutingEngine(单播路由只需要在任何数据库的任何表中获取就可以,相当于获取表中公有信息)、

数据源组的广播路由引擎DataSourceGroupBroadcastRoutingEngine、

数据库主库实例的广播路由引擎MasterInstanceBroadcastRoutingEngine(这个就是针对主库进行的操作,比如一些授权的SQL语句)

笛卡尔路由引擎CartesianRoutingEngine、

混合路由引擎ComplexRoutingEngine、

标准路由引擎StandardRoutingEngine

标准路由

标准路由是ShardingSphere推荐使用的一种分片路由策略,在进行分片表只有一个或者分片表是绑定关系,这个绑定关系是在配置文件中定义的,比如如下配置:

shardingRule:
  bindingTables: 
     table1,table2

这个配置文件会解析成BindingTableRule集合,在进行判断绑定关系的时候根据逻辑表名获取BindingTableRule对象,判断是否在集合中,如果有就表明存在绑定关系

路由逻辑

路由逻辑在StandardRoutingEngine的route()中体现,具体逻辑是分两步走,先获取数据节点,在生成路由结果,获取路由接点对应StandardRoutingEngine的getDataNodes()方法:

    private Collection<DataNode> getDataNodes(final TableRule tableRule) {
        if (isRoutingByHint(tableRule)) {
            return routeByHint(tableRule);
        }
        if (isRoutingByShardingConditions(tableRule)) {
            return routeByShardingConditions(tableRule);
        }
        return routeByMixedConditions(tableRule);
    }
  • 如果是基于Hint的路由,具体就判断分片策略是否为HintShardingStrategy对象,调用routeByHint()方法
  • 如果是分片条件的路由,调用isRoutingByShardingConditions()方法
  • 否则就调用复合条件的路由

这三种情况都会调用route0()方法,先进行数据源的路由,再进行表的路由,生成数据节点

总结

这篇文章我们介绍了RoutingEngineFactory的newInstance()方法的具体逻辑,主要功能就是根据不同的SQL语句来创建不同的路由引擎,我们罗列一下ShardingSphere支持哪些路由引擎,并介绍了这些路由引擎的应用场景,其中对标准路由进行详细,介绍,先是根据路由规则获取数据节点,然后生成路由结果,具体路由策略在ShardingStrategy的实现类中体现。

以上就是java开发ShardingSphere的路由引擎类型示例详解的详细内容,更多关于java ShardingSphere路由引擎的资料请关注脚本之家其它相关文章!

相关文章

  • 部署springboot打包不打包配置文件,配置文件为外部配置文件使用详解

    部署springboot打包不打包配置文件,配置文件为外部配置文件使用详解

    在Spring Boot项目中,将配置文件排除在jar包之外,通过外部配置文件来管理不同环境的配置,可以实现灵活的配置管理,在pom.xml文件中添加相关配置,打包时忽略指定文件,运行时在jar包同级目录下创建config文件夹,将配置文件放入其中即可
    2025-02-02
  • Java实现单例模式的五种方式总结

    Java实现单例模式的五种方式总结

    这篇文章主要介绍了如何实现一个单例模式,包括构造器私有化、提供静态私有变量和公共获取实例接口,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-01-01
  • Java 读取图片的mimeType的方法

    Java 读取图片的mimeType的方法

    本篇文章主要介绍了Java 读取图片的mimeType的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • SpringBoot配置文件bootstrap和application区别及说明

    SpringBoot配置文件bootstrap和application区别及说明

    这篇文章主要介绍了SpringBoot配置文件bootstrap和application区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • idea项目结构中不显示out文件夹的解决

    idea项目结构中不显示out文件夹的解决

    本文通过图片的方式详细解释操作步骤,使读者能够更直观更方便地理解和执行操作,同时,文章末尾祝福读者步步高升,一帆风顺,展现了作者的人情味和亲和力,整体来说,这是一篇简单易懂、实用性强的操作指南
    2024-10-10
  • java基于servlet实现文件上传功能解析

    java基于servlet实现文件上传功能解析

    这篇文章主要为大家详细介绍了java基于servlet实现上传功能,后台使用java实现,前端主要是js的ajax实现,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • Java如何在PDF中添加ToolTip工具提示

    Java如何在PDF中添加ToolTip工具提示

    大家好,本篇文章主要讲的是Java如何在PDF中添加ToolTip工具提示,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • SpringBoot多数据源解决方案:dynamic-datasource-spring-boot-starter

    SpringBoot多数据源解决方案:dynamic-datasource-spring-boot-starter

    本文主要介绍了SpringBoot多数据源解决方案,使用dynamic-datasource-spring-boot-starter实现,具有一定的参考价值,感兴趣的可以了解一下
    2025-03-03
  • java采用中文方式显示时间的方法

    java采用中文方式显示时间的方法

    这篇文章主要介绍了java采用中文方式显示时间的方法,实例分析了java时间操作及字符串转换的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • MyBatis-Plus实现对查询结果进行分页的基本步骤

    MyBatis-Plus实现对查询结果进行分页的基本步骤

    MyBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生,MyBatis-Plus 支持多种数据库的分页查询,其分页功能是通过 Page 类实现的,本文介绍了使用 MyBatis-Plus 实现分页查询的基本步骤,需要的朋友可以参考下
    2024-08-08

最新评论