美文网首页Sharding-JDBC
Sharding-JDBC-强制路由

Sharding-JDBC-强制路由

作者: 蓝胖子的白日梦丶 | 来源:发表于2019-04-29 18:09 被阅读301次

强制路由

简介

ShardingSphere使用ThreadLocal管理分片键值进行Hint强制路由。可以通过编程的方式向HintManager中添加分片值,该分片值仅在当前线程内生效。 Hint方式主要使用场景:

1.分片字段不存在SQL中、数据库表结构中,而存在于外部业务逻辑。

2.强制在主库进行某些数据操作。

基于暗示(Hint)的数据分片

配置Hint分片算法

Hint分片算法需要用户实现org.apache.shardingsphere.api.sharding.hint.HintShardingAlgorithm接口。ShardingSphere在进行Routing时,如果发现LogicTable的TableRule采用了 Hint的分片算法,将会从HintManager中获取分片值进行路由操作。

参考配置如下:

shardingRule:
  tables:
   t_order:
        actualDataNodes: demo_ds_${0..1}.t_order_${0..1}
        databaseStrategy:
          hint:
            algorithmClassName: yourHintShardingAlgorithm
        tableStrategy:
          hint:
            algorithmClassName: yourHintShardingAlgorithm
  defaultDatabaseStrategy:
    inline:
      shardingColumn: user_id
      algorithmExpression: demo_ds_${user_id % 2}
  defaultTableStrategy:
    none:
  defaultKeyGenerator:
    type: SNOWFLAKE
  props:
      sql.show: true

获取HintManager

HintManager hintManager = HintManager.getInstance();

添加分片键值

  • 使用hintManager.addDatabaseShardingValue来添加数据源分片键值。
  • 使用hintManager.addTableShardingValue来添加表分片键值。

分库不分表情况下,强制路由至某一个分库时,可使用hintManager.setDatabaseShardingValue方式添加分片。通过此方式添加分片键值后,将跳过SQL解析和改写阶段,从而提高整体执行效率。

清除分片键值

分片键值保存在ThreadLocal中,所以需要在操作结束时调用hintManager.close()来清除ThreadLocal中的内容。

hintManager实现了AutoCloseable接口,可推荐使用try with resource自动关闭。

完整代码示例

// Sharding database and table with using hintManager.
        String sql = "SELECT * FROM t_order";
        try (HintManager hintManager = HintManager.getInstance();
             Connection conn = dataSource.getConnection();
             PreparedStatement preparedStatement = conn.prepareStatement(sql)) {
            hintManager.addDatabaseShardingValue("t_order", 1);
            hintManager.addTableShardingValue("t_order", 2);
            try (ResultSet rs = preparedStatement.executeQuery()) {
                while (rs.next()) {
                    // ...
                }
            }
        }

// Sharding database without sharding table and routing to only one database with using hintManger.
        String sql = "SELECT * FROM t_order";
        try (HintManager hintManager = HintManager.getInstance();
             Connection conn = dataSource.getConnection();
             PreparedStatement preparedStatement = conn.prepareStatement(sql)) {
            hintManager.setDatabaseShardingValue(3);
            try (ResultSet rs = preparedStatement.executeQuery()) {
                while (rs.next()) {
                    // ...
                }
            }
        }

基于暗示(Hint)的强制主库路由

获取HintManager

与基于暗示(Hint)的数据分片相同。

设置主库路由

  • 使用hintManager.setMasterRouteOnly设置主库路由。

清除分片键值

与基于暗示(Hint)的数据分片相同。

完整代码示例

String sql = "SELECT * FROM t_order";
try (
        HintManager hintManager = HintManager.getInstance();
        Connection conn = dataSource.getConnection();
        PreparedStatement preparedStatement = conn.prepareStatement(sql)) {
    hintManager.setMasterRouteOnly();
    try (ResultSet rs = preparedStatement.executeQuery()) {
        while (rs.next()) {
            // ...
        }
    }
}

example

hint-example

相关文章

  • Sharding-JDBC-强制路由

    强制路由 简介 ShardingSphere使用ThreadLocal管理分片键值进行Hint强制路由。可以通过编...

  • vue-router配置

    点击样式 输入其他路由,强制返回??? to是要去的路由,from是本来的路由,savedPosition记录fr...

  • thinkphp 路由

    路由定义文件 route 定义下的所有的路由文件都是有效的 定义路由必须使用 控制器定义 修改配置文件,强制路由访...

  • Vue3:vue-router 的高级用法

    1、路由重定向 路由重定向指的是:用户在访问地址 A 的时候,强制用户跳转到地址 C ,从而展示特定的组件页面。通...

  • 用Thinkphp5开发API,前后端分离步骤

    自定义全局异常处理跨域问题修改默认输出类型自定义路由+强制路由路由中间件做权限判断 前端访问API如果是TP5的错...

  • wifi破解

    利用网卡监控模式监控wifi热点 .然后强制断开用户与路由连接.利用用户与路由四次握手机会获取握手包.然后跑字典

  • vue跳转同一页面强制刷新

    vue路由的解析 vue中当跳转的是同一个路由的时候,页面不会发生强制性变化,比如说头部的搜索中通过路由传不同的参...

  • vue路由传参params和query区别

    params:路由配置时候要在路径后面加动态配置的参数名 如:/:id,强制刷新会被清空,参数不会显示在路径地址...

  • vue 强制刷新组件

    vue 强制刷新组件 使用vue进行开发时,如果要刷新当前路由,则调用router.go(0)方法即可。但是某些情...

  • Sharding-JDBC-数据脱敏

    数据脱敏 该章节主要介绍如何使用数据脱敏功能,如何进行相关配置。数据脱敏功能即可与数据分片功能共同使用,又可作为单...

网友评论

    本文标题:Sharding-JDBC-强制路由

    本文链接:https://www.haomeiwen.com/subject/fdsunqtx.html