ShardingSphere-JDBC SPI扩展点-RouteDecorator

装饰器扩展点

  • org.apache.shardingsphere.underlying.route.decorator.RouteDecorator
  • org.apache.shardingsphere.underlying.rewrite.context.SQLRewriteContextDecorator
  • org.apache.shardingsphere.underlying.merge.engine.decorator.ResultDecoratorEngine
  • org.apache.shardingsphere.underlying.merge.engine.merger.ResultMergerEngine

路由装饰器RouteDecorator是ShardingSphere最重要的扩展点之一,它主要负责ShardingKey校验组装路由条件ShardingConditions根据SQL类型创建路由引擎并获取路由结果等,为SQL重写做准备。

ShardingKey校验

ShardingSphere 提供两种类型校验器用于校验更新ShardingKey是否合法。

ShardingStatementValidatorFactory.newInstance(
    sqlStatementContext.getSqlStatement()).ifPresent(validator -> validator.validate(shardingRule, sqlStatementContext.getSqlStatement(), parameters));
  1. ShardingInsertStatementValidator 用于校验INSERT INTO .... ON DUPLICATE KEY UPDATE语句中是否含有ShardingKey,如果包含则抛异常不允许更新;
  2. ShardingUpdateStatementValidator 用于校验更新的字段中是否含有ShardingKey,如果包含则抛异常。

添加该校验的目的是避免更新ShardingKey导致后续路由错误。

组装路由条件ShardingConditions

根据SQL类型,组装路由引擎执行所需的参数。由于insert和其他带where条件的SQL处理逻辑不同,所以分别进行处理,通过InsertClauseShardingConditionEngine和WhereClauseShardingConditionEngine来组装ShardingConditions,ShardingConditions中包括ShardingKey与ShardingValue的映射

获取路由结果

根据SQL类型获取路由引擎,执行路由引擎的route方法获取路由结果,
在route方法中会根据shardingKey对应的ShardingValue去执行SQL对应逻辑表的分库分表算法获取真实路由库表。

应用

在该扩展点中可以根据业务场景定制化实现SDK,满足业务需求,如:是否允许更新ShardingKey,是否开启强制路由。

允许更新ShardingKey

在某些业务场景下需要对ShardingKey进行Update操作,但ShardingJDBC对更新ShardingKey进行了强校验,不允许更新ShardingKey,避免路由错误。

可以对ShardingKey校验增加一个开关,由业务控制是否打开校验开关

private static final ThreadLocal
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值