sharding源码解析之api分析

news/2024/8/26 8:15:28

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

说在前面

本文转自“天河聊技术”微信公众号

 

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

 

sharding的分片api介绍

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

 

inline分片方式

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

18141434_sWwp.jpg

上图中的配置是指定了一种表的分片策略,这种表的逻辑表名是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分片表达式内部实现

 

18141435_Avj1.jpg

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

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

 

普通的分片实现方式

 

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

18141435_Q4OU.jpg

 

ShardingAlgorithm 顶层分片策略接口

TableShardingAlgorithm 表分片策略接口

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

DatabaseShardingAlgorithm 数据库分片策略接口

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

18141435_yS6k.jpg

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

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

18141435_RFle.jpg

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

 

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

18141435_LVV9.jpg

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

 

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

18141435_Sx04.jpg

 

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

18141435_YE6b.jpg

 

说到最后

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

转载于:https://my.oschina.net/u/3775437/blog/1641860


http://www.niftyadmin.cn/n/1998678.html

相关文章

linux实验网络程序报告7,2014-2-26实验报告简单的Linux命令

1、命令的格式命令字 [选项] [参数]命令字表示完成相应操作的具体命令选项表示命令的要求参数表示命令的作用对象2、linux系统中关机操作#shutdown -h now#poweroff重启#shutdown -r now#reboot3、目录相关命令1)pwd查看当前所在的目录2)mkdir目录名(创建目录)3)ls查看当前目…

程序员创业成功必须遵守的几条铁律

程序员创业成功必须遵守的几条铁律 一、超速创业 老板法则一:要创业,就要做好亏钱或赢钱的准备; 想赚大钱,最快的方法就是自己当老板。 当老板当然有两种可能,一个是赚大钱,另外一个风险就是亏钱。我今天…

读《构建之法》

按照精读的读法,细致的读完了《构建之法》的第一、二、十六章。结合书本内容与自我理解,提出以下问题。 第一章 1.1软件程序软件工程 书中有这样一个例子:如果一架民用飞机上有需求,用户使用它的概率是百万分之一,你还…

Ubuntu 16.04 提权漏洞

Ubuntu 提权漏洞 下午闲来没事,朋友扔给我一个Ubuntu 提权exp 亲测可用,记录下 /* Ubuntu 16.04.4 kernel priv esc all credits to bleidl vnik*/// Tested on:// 4.4.0-116-generic #140-Ubuntu SMP Mon Feb 12 21:23:04 UTC 2018 x86_64// if differe…

程序员想创业首先要突破自己三关

当人们还在浩叹第一次网络泡沫破灭的时候,互联网已经悄悄迎来了它的第二个春天;从某种意义上看,甚至已经进入了夏天——热烈但不乏浮躁、兴奋但失之肤浅。某位投资人声称今年总共有三十亿美金资本进入中国,言下之意,大…

SpringMVC源码分析系列(精简)

springmvc源码分析 启动过程springMvc配置解析DispatcherServlet调用过程 HandleMappingHandleAdapter DispatcherServlet调用HandlerAdapter过程 SpringMVC源码分析系列: SpringMVC源码解析(1)-启动过程SpringMVC源码解析(2)-DispatcherServletSpringMVC源码解析(3)-HandleMap…

成人寓言

第一篇:蛇与乌龟的故事       一条大蟒蛇和一条小毒蛇是朋友。 这天他们在路边发现了一只巨大的乌龟。 蛇兄弟想,这么大的个儿,可是一顿美餐啊。 蟒蛇说:我来对付他。 于是蟒蛇施展自己的绝技&…

控制别人电脑的软件linux,Linux怎么实现shell命令的远程控制 Linux实现shell命令的远程控制的方法...

今天给大家带来Linux怎么实现shell命令的远程控制,Linux实现shell命令的远程控制的方法,让您轻松解决问题。我们都知道,在Linux下能够轻易的进行shell命令的执行,那么能否在其他电脑上执行本台电脑的shell命令呢?其实是…