sharding-jdbc源码解析之配置解析二

说在前面

昨天发出的上篇配置解析的文章,没有介绍sharding-jdbc提供的分片的api和与spring集成的配置文件,可能直接看配置源码解析不太直观,今天把这两块补上,这个也是收到了芋头小钝的建议,感谢芋头小钝。

sharding的分片api介绍

sharding-jdbc提供的分片有两种方式,一种就是inline表达式,底层是groovy通过解析你配置的闭包实现的,一种是指定分片策略的实现类,分片算法支持三种,=、in、between。

inline分片方式

sharding-jdbc集成spring的配置文件中这样配置

上图中的配置是指定了一种表的分片策略,这种表的逻辑表名是demo,可以看到demo_${create_time.toString("yyyyMM")}这里是用demo_作为物理表的前缀和具体的后缀拼接起来就成了具体的物理表,toString() 方法就是sharding-jdbc的提供的inline表达式支持的其中一个闭包,${create_time.toString("yyyyMM")}这个部分就是inline表达式,这个inline表达式的意思就是把分片字段值按照这个时间格式格式化成字符串拼接到demo_的后面,sharding-columns="create_time"这里制定了按照分片字段,整体解释下,逻辑表是demo,create_time分片字段值是“20170801 00:00:00“,这里的时间是Date类型,那么具体路由到的表就是demo_201708 这张物理表,一句话概括就是demo这张表是按月分表的。

inline分片表达式内部实现

sharding-jdbc源码解析之配置解析二_第1张图片

具体实现是上图标注的几个类,还有InlineParser inline表达式解析器类,底层是通过groovy解析闭包的方式进行实现的,值得介绍的是下面的这个类

com.dangdang.ddframe.rdb.sharding.config.common.internal.algorithm.ShardingValueWrapper 这个类是sharding-jdbc默认提供的哪些inline表达式,如果需要可以对其进行扩展。

普通的分片实现方式

分片策略接口和默认实现整体类图

sharding-jdbc源码解析之配置解析二_第2张图片

ShardingAlgorithm 顶层分片策略接口

TableShardingAlgorithm 表分片策略接口

MultipleKeysShardingAlgorithm 多个key分片策略接口,这个接口只有一个分片抽象方法,doSharding() 方法

DatabaseShardingAlgorithm 数据库分片策略接口

SingleKeyShardingAlgorithm 单个key分片策略接口,支持三种运算符的分片策略,如下图

sharding-jdbc源码解析之配置解析二_第3张图片

这种分片策略也是用的最多的,我们的项目美利财务平台中分片策略也是用的这种分片策略。

NoneKeyShardingAlgorithm 无分片值策略接口,数据量小的表不考虑分片就会走这个分片策略。

sharding-jdbc源码解析之配置解析二_第4张图片

上图中这一层接口是第二层接口的组合实现,开发中只需要实现这层接口实现自己具体的分片策略即可,也可以实现第二层接口,那就需要实现多个接口,建议实现第三层接口。

这些是sharding-jdbc的默认分片实现

sharding-jdbc源码解析之配置解析二_第5张图片

可以参考这些实现实现自己个性化分片实现

这里是分片的引擎实现,在sql路由的时候会详细介绍

sharding-jdbc源码解析之配置解析二_第6张图片

sharding-jdbc集成spring的xml配置文件

sharding-jdbc源码解析之配置解析二_第7张图片

说到最后

本篇文章主要介绍了sharding-jdbc提供了inline表达式分片方式,配置方便,还有提供了实现分片接口的方式,可以灵活扩展,和spring集成的配置可以参考最后一张图或者参考sharding-jdbc官方网站的文档,相信大家对这些了解之后,再看上篇文章sharding-jdbc集成spring配置文件解析的内容应该会容易一些,以上内容仅供参考,下篇文章将接着对上篇文章集成spring配置文件解析的剩余部分进行讲解。



关注微信公众号

sharding-jdbc源码解析之配置解析二_第8张图片

加入技术微信群

sharding-jdbc源码解析之配置解析二_第9张图片

你可能感兴趣的:(sharding-jdbc源码解析之配置解析二)