第五章:Sharding-JDBC 自定义分片算法
Sharding-JDBC 自定义分片算法
- 自定义分片算法
- Sharding提供了以下4种算法接口
- PreciseShardingAlgorithm
- RangeShardingAlgorithm
- HintShardingAlgorithm
- ComplexKeysShardingAlgorithm
- Sharding提供了以下4种算法接口
- 自定义分片算法实例
- 演示自定义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 自定义分片算法相关推荐
- ShardingSphere笔记(三):自定义分片算法 — 按月分表·真·自动建表
ShardingSphere笔记(二):自定义分片算法 - 按月分表·真·自动建表 文章目录 ShardingSphere笔记(二):自定义分片算法 - 按月分表·真·自动建表 一. 前言 二. Sp ...
- Sharding JDBC(四) 分片策略一:标准分片策略StandardShardingStrategy
目录 一.标准分片策略StandardShardingStrategy 二.StandardShardingStrategy配置实现 分库分表最核心的两点SQL 路由 . SQL 改写 applic ...
- sharding jdbc 的雪花算法中的属性worker.id和max.vibration.offset
雪花算法生成的id总共64位8个字节,结构如下: 符号位 时间位 工作机器标识位 序列位 1位(固定位0) 41位 10位 12位 worker.id sharding jdbc 4.1.1使用雪花 ...
- 《无人驾驶车辆模型预测控制》(第2版)第五章主动转向详细学习——算法部分(非线性系统线性化)
一.状态轨迹的线性化方法 1.理解: 第四章的期望轨迹给出了路径上每个点的状态信息(包括状态量和控制量),这类轨迹比较规则,比如直线.圆等,因此其控制量也容易得到,而对于"期望轨迹无法给出所 ...
- 【.NET Core项目实战-统一认证平台】第五章 网关篇-自定义缓存Redis
上篇文章[.NET Core项目实战-统一认证平台]第四章 网关篇-数据库存储配置(2)我们介绍了2种网关配置信息更新的方法和扩展Mysql存储,本篇我们将介绍如何使用Redis来实现网关的所有缓存功 ...
- WCF 第五章 行为 实现自定义行为
自定义行为可以在WCF创建运行时和消息处理管道时让你在重要的地方插入代码.行为可以添加到代码中,通过属性或配置文件手动实现服务描述.在所有的情况中,代码可以做一些辅助动作,比如在一个目录中寻找信息或者 ...
- 第十五章:垃圾回收相关算法
标记阶段:引用计数算法 循环引用 举例 小结 标记阶段:可达性分析算法 概念 思路 GC Roots可以是哪些? 总结 小技巧 注意 对象的finalization机制 注意 生存还是死亡? 具体过程 ...
- 第五章:创建自定义绑定
你可以创建自己的自定义绑定 – 没有必要非要使用内嵌的绑定(像click,value等).你可以你封装复杂的逻辑或行为,自定义很容易使用和重用的绑定.例如,你可以在form表单里自定义像grid,ta ...
- Sharding JDBC分片和读写分离详解
目录 Sharding Sphere简介 开始使用Sharding JDBC 数据分片 简单示例 Spring Boot示例 代码分析 属性分析 绑定表和广播表 真实表 绑定表 广播表 Shardin ...
最新文章
- R语言可视化R原生plot函数与ggplot可视化结果组合、整合输出实战:原生R绘图plot函数可视化、ggplot2包可视化、R原生plot函数与ggplot可视化结果组合
- [每日短篇] 1D - 消除 if 的一种方法
- java css_JavaWeb中基本的CSS的使用
- es重建字段类型_关于elasticsearch中更新数据的几种方式
- swift不用声明类型那些事
- 【Linux】一步一步学Linux——whereis命令(15)
- 常见中文NER数据集大盘点
- mysql主从同步报错_mysql主从同步报错
- 判定系数推导 — Coefficient of Determination Derivation
- Nature命名规范
- Ettercap网络嗅探工具攻略
- 数学建模——Logistic Regression逻辑回归算法(二分类及多分类的Python代码实现)
- 图像特征点匹配,SIFT及SURF算法的原理及尽量抛开数学问题的浅析(含示例程序,基于VS2013,OpenCV_2.49)
- 网站制作流程详解(学做网站第一步)
- 软件项目管理存在的问题及改进措施
- 中国农业大学计算机专硕2019分数线,中国农业大学2019考研复试分数线已公布
- 基于java springboot的图书管理系统设计和实现
- PHP实现站内信设计思路与方案
- 电脑浏览器提示“ Adobe Flash Player 插件已被屏蔽”修复方法
- 量化金融kaggle竞赛汇总
热门文章
- html5 css js前端开发五子棋UI篇--基于慕课网五子棋视频教程的随笔
- python实现坐标点的系统转换
- 2.2.1 数据通信系统的模型
- 【线性代数之一】行列式计算
- python爬取百度地图数据_百度地图POI数据爬取
- appvlv中偶有不爽
- 开发时间太紧被扣钱了,不爽
- 怎么用计算机管理你的外卖订单,外卖系统怎么确定收到订单 外卖接单软件怎么做...
- 素玄科技有限公司 php,php实现简单算法1 - osc_sw6n0c3p的个人空间 - OSCHINA - 中文开源技术交流社区...
- 庄股高手和你谈选股绝招(2)