Sharding-JDBC 自定义分片算法

  • 自定义分片算法

    • Sharding提供了以下4种算法接口

      • PreciseShardingAlgorithm
      • RangeShardingAlgorithm
      • HintShardingAlgorithm
      • ComplexKeysShardingAlgorithm
  • 自定义分片算法实例
    • 演示自定义PreciseShardingAlgorithm的使用
    • 自定义算法概述
      • 表分片策略:

        • 分片键:order_id
        • 分片算法:以order_id为分片键,分片策略为order_id % 2 + 1
          • order_id为偶数,插入t_order_1
          • order_id为奇数,插入t_order_2
      • 编写自定义的实现类:MyPreciseShardingAlgorithm,实现PreciseShardingAlgorithm接口
      • 将自定义实现类配置到application.properties
      • 测试自定义实现类
    • 步骤流程
      • 编写自定义的实现类

        public class MyPreciseShardingAlgorithm implements PreciseShardingAlgorithm<Long> {private static final Logger LOGGER = LoggerFactory.getLogger(MyPreciseShardingAlgorithm.class);@Overridepublic String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<Long> shardingValue) {LOGGER.info("collection:" + JacksonUtil.writeValueAsString(availableTargetNames) + ",preciseShardingValue:" + JacksonUtil.writeValueAsString(shardingValue));//availableTargetNames: t_order_1,t_order_2//shardingValue: {"logicTableName":"t_order","columnName":"order_id","value":396416249350848512}//collection:["t_order_1","t_order_2"],preciseShardingValue:{"logicTableName":"t_order","columnName":"order_id","value":396416249350848512}//name为两张订单表 t_order_1 和 t_order_2for (String name : availableTargetNames) {//订单号取模加1 与 订单表t_order_1 和 t_order_2的尾号做比对,如相等,就直接返回t_order_1 或 t_order_2if (name.endsWith(String.valueOf(shardingValue.getValue() % 2 + 1))) {LOGGER.info("return name: " + name);return name;}}return null;}
        }
        
      • 配置自定义算法

        # 指定 t_order表的分片策略,分片策略包括分片键和分片算法
        spring.shardingsphere.sharding.tables.t_order.table-strategy.standard.sharding-column = order_id
        spring.shardingsphere.sharding.tables.t_order.table-strategy.standard.precise-algorithm-class-name = com.shair.sharding.MyPreciseShardingAlgorithm
        
      • 编写自定义的实现类

        @RunWith(SpringRunner.class)
        @SpringBootTest
        class ApplicationTests {@Autowiredprivate OrderDao orderDao;@Testpublic void testInsertOrder() {for (int i = 0; i < 10; i++) {Order order = new Order();order.setPrice(new BigDecimal((i + 1) * 5));order.setUserId(1L);order.setStatus("SUCCESS");orderDao.insert(order);}}
        }
      • 日志

        com.shair.sharding.MyPreciseShardingAlgorithm - collection:["t_order_1","t_order_2"],preciseShardingValue:{"logicTableName":"t_order","columnName":"order_id","value":396416249178882048}
        com.shair.sharding.MyPreciseShardingAlgorithm - return name: t_order_1
        ShardingSphere-SQL - Actual SQL: m2 ::: INSERT INTO t_order_1 (price, user_id, status, order_id) VALUES (?, ?, ?, ?) ::: [10, 1, SUCCESS, 396416249178882048]
        • 通过日志可以发现:

          • order_id为奇数的被插入到 t_order_2表
          • order_id为偶数的被插入到 t_order_1表

第五章:Sharding-JDBC 自定义分片算法相关推荐

  1. ShardingSphere笔记(三):自定义分片算法 — 按月分表·真·自动建表

    ShardingSphere笔记(二):自定义分片算法 - 按月分表·真·自动建表 文章目录 ShardingSphere笔记(二):自定义分片算法 - 按月分表·真·自动建表 一. 前言 二. Sp ...

  2. Sharding JDBC(四) 分片策略一:标准分片策略StandardShardingStrategy

    目录 一.标准分片策略StandardShardingStrategy 二.StandardShardingStrategy配置实现 分库分表最核心的两点SQL 路由  . SQL 改写 applic ...

  3. sharding jdbc 的雪花算法中的属性worker.id和max.vibration.offset

    雪花算法生成的id总共64位8个字节,结构如下: 符号位 时间位 工作机器标识位 序列位 1位(固定位0) 41位 10位 12位 worker.id sharding jdbc  4.1.1使用雪花 ...

  4. 《无人驾驶车辆模型预测控制》(第2版)第五章主动转向详细学习——算法部分(非线性系统线性化)

    一.状态轨迹的线性化方法 1.理解: 第四章的期望轨迹给出了路径上每个点的状态信息(包括状态量和控制量),这类轨迹比较规则,比如直线.圆等,因此其控制量也容易得到,而对于"期望轨迹无法给出所 ...

  5. 【.NET Core项目实战-统一认证平台】第五章 网关篇-自定义缓存Redis

    上篇文章[.NET Core项目实战-统一认证平台]第四章 网关篇-数据库存储配置(2)我们介绍了2种网关配置信息更新的方法和扩展Mysql存储,本篇我们将介绍如何使用Redis来实现网关的所有缓存功 ...

  6. WCF 第五章 行为 实现自定义行为

    自定义行为可以在WCF创建运行时和消息处理管道时让你在重要的地方插入代码.行为可以添加到代码中,通过属性或配置文件手动实现服务描述.在所有的情况中,代码可以做一些辅助动作,比如在一个目录中寻找信息或者 ...

  7. 第十五章:垃圾回收相关算法

    标记阶段:引用计数算法 循环引用 举例 小结 标记阶段:可达性分析算法 概念 思路 GC Roots可以是哪些? 总结 小技巧 注意 对象的finalization机制 注意 生存还是死亡? 具体过程 ...

  8. 第五章:创建自定义绑定

    你可以创建自己的自定义绑定 – 没有必要非要使用内嵌的绑定(像click,value等).你可以你封装复杂的逻辑或行为,自定义很容易使用和重用的绑定.例如,你可以在form表单里自定义像grid,ta ...

  9. Sharding JDBC分片和读写分离详解

    目录 Sharding Sphere简介 开始使用Sharding JDBC 数据分片 简单示例 Spring Boot示例 代码分析 属性分析 绑定表和广播表 真实表 绑定表 广播表 Shardin ...

最新文章

  1. R语言可视化R原生plot函数与ggplot可视化结果组合、整合输出实战:原生R绘图plot函数可视化、ggplot2包可视化、R原生plot函数与ggplot可视化结果组合
  2. [每日短篇] 1D - 消除 if 的一种方法
  3. java css_JavaWeb中基本的CSS的使用
  4. es重建字段类型_关于elasticsearch中更新数据的几种方式
  5. swift不用声明类型那些事
  6. 【Linux】一步一步学Linux——whereis命令(15)
  7. 常见中文NER数据集大盘点
  8. mysql主从同步报错_mysql主从同步报错
  9. 判定系数推导 — Coefficient of Determination Derivation
  10. Nature命名规范
  11. Ettercap网络嗅探工具攻略
  12. 数学建模——Logistic Regression逻辑回归算法(二分类及多分类的Python代码实现)
  13. 图像特征点匹配,SIFT及SURF算法的原理及尽量抛开数学问题的浅析(含示例程序,基于VS2013,OpenCV_2.49)
  14. 网站制作流程详解(学做网站第一步)
  15. 软件项目管理存在的问题及改进措施
  16. 中国农业大学计算机专硕2019分数线,中国农业大学2019考研复试分数线已公布
  17. 基于java springboot的图书管理系统设计和实现
  18. PHP实现站内信设计思路与方案
  19. 电脑浏览器提示“ Adobe Flash Player 插件已被屏蔽”修复方法
  20. 量化金融kaggle竞赛汇总

热门文章

  1. html5 css js前端开发五子棋UI篇--基于慕课网五子棋视频教程的随笔
  2. python实现坐标点的系统转换
  3. 2.2.1 数据通信系统的模型
  4. 【线性代数之一】行列式计算
  5. python爬取百度地图数据_百度地图POI数据爬取
  6. appvlv中偶有不爽
  7. 开发时间太紧被扣钱了,不爽
  8. 怎么用计算机管理你的外卖订单,外卖系统怎么确定收到订单 外卖接单软件怎么做...
  9. 素玄科技有限公司 php,php实现简单算法1 - osc_sw6n0c3p的个人空间 - OSCHINA - 中文开源技术交流社区...
  10. 庄股高手和你谈选股绝招(2)