ShardingSphere核心源码剖析

下载源码(选择自己喜欢的版本即可)

https://github.com/apache/incubator-shardingsphere/archive/4.0.0-RC2.zip

2、导入工程到IDEA

3、sharding-core-parse编译

注意先编译此工程是因为:工程内的部分类需要依靠antlr4 SQL解析引擎生成,否则直 接编译sharding工程讲报部分类找不到的错误。

编译本工程注意用的是:lifecycle下的install 

4、编译全工程

 

注意是用maven-plugin编译,且编译要记得跳过测试部分

 

译时:sharding-sql-test工程会报错,直接忽略即可。

编译完成:运行demo可正常执行则说明编译成功 

Apache孵化版-模块划分

内核剖析 

数据分片-执行过程

 解析引擎

解析过程分为词法解析和语法解析。 词法解析器用于将SQL拆解为不可再分的原子符 号,称为Token。并根据不同数据库方言所提供的字典,将其归类为关键字,表达式,字面 量和操作符。 再使用语法解析器将SQL转换为抽象语法树。

SELECT id, name FROM t_user WHERE status = 'ACTIVE' AND age > 18

sql解析整体结构: 

路由引擎

内置的分片策略大致可分为尾数取模、哈希、范围、标签、时间等。 由用户方配置的 分片策略则更加灵活,可以根据使用方需求定制复合分片策略。 

SQL改写 

为路由之后所获取的真

执行引擎 

结果归并 

将从各个数据节点获取的多数据结果集,组合成为一个结果集并正确的返回至请求客户 端,称为结果归并。

分布式主键 

内置生成器支持:UUID、SNOWFLAKE,并抽离出分布式主键生成器 的接口,方便用户自行实现自定义的自增主键生成器。

SNOWFLAKE 雪花算法

能够保证不同进程主键的不重复性,相同进程主键的有序性。二进制形式包 含4部分,从高位到低位分表为:1bit符号位、41bit时间戳位、10bit工作进程位以及12bit 序列号位。

  • 符号位(1bit)

预留的符号位,恒为零。

  • 时间戳位(41bit)

41位的时间戳可以容纳的毫秒数是2的41次幂,一年所使用的毫秒数是:365 * 24 * 60 * 6 0 * 1000 Math.pow(2, 41) / (365 * 24 * 60 * 60 * 1000L) = 69.73年不重复;

  • 工作进程位(10bit)

该标志在Java进程内是唯一的,如果是分布式应用部署应保证每个工作进程的id是不同 的。该值默认为0,可通过属性设置。

  • 序列号位(12bit)

该序列是用来在同一个毫秒内生成不同的ID。如果在这个毫秒内生成的数量超过 4096(2的12次幂),那么生成器会等待到下个毫秒继续生成。

Mybatis-SQL执行过程 

分库分表源码结构如下 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小强同志

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值