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

作者:周杰伦本人 时间:2023-11-29 01:18:56 

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()方法,先进行数据源的路由,再进行表的路由,生成数据节点

来源:https://juejin.cn/post/7127302621911908383

标签:java,ShardingSphere,路由引擎
0
投稿

猜你喜欢

  • Java中IO流解析及代码实例详解

    2022-03-08 22:32:16
  • C#实现关闭其他程序窗口或进程代码分享

    2022-05-26 07:38:03
  • C#使用前序遍历、中序遍历和后序遍历打印二叉树的方法

    2023-11-24 11:00:37
  • Android判断用户2G/3G/4G移动数据网络

    2022-12-13 03:21:49
  • Android 基于百度语音的语音交互功能(推荐)

    2021-08-22 01:26:38
  • mybatis-plus QueryWrapper 添加limit方式

    2022-12-09 02:08:11
  • Spring Boot如何通过CORS处理跨域问题

    2021-09-10 02:44:15
  • Spring Boot实现配置文件的自动加载和刷新功能

    2023-07-14 02:26:55
  • Android开发中ProgressDialog简单用法示例

    2021-11-03 10:17:37
  • android书架效果实现原理与代码

    2022-03-14 21:55:53
  • Java 编程中十个处理异常的建议

    2022-10-27 11:34:41
  • Java关键字instanceof的两种用法实例

    2023-07-31 06:24:50
  • SpringBoot中配置Web静态资源路径的方法

    2023-10-26 03:49:21
  • DataGridView控件显示行号的正确代码及分析

    2022-07-26 22:05:50
  • Android中AlertDialog 点击按钮后不关闭对话框的功能

    2023-08-04 22:55:50
  • java统计文件中每个字符出现的个数

    2021-12-22 06:43:42
  • Spring Boot整合ElasticSearch实现多版本兼容的方法详解

    2021-09-20 18:06:22
  • android编程之ip2id程序实例

    2023-07-20 16:08:09
  • android利用handler实现倒计时功能

    2021-10-19 07:36:59
  • Java发送http请求的示例(get与post方法请求)

    2021-09-29 23:21:40
  • asp之家 软件编程 m.aspxhome.com