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执行过程
分库分表源码结构如下
ShardingSphere核心源码剖析相关推荐
- MyBatis核心源码剖析(SqlSession XML解析 Mapper executor SQL执行过程 自定义类型处理器 缓存 日志)
MyBatis核心源码剖析 MyBatis核心源码剖析 1 MyBatis源码概述 1.1 为什么要看MyBatis框架的源码 1.2 如何深入学习MyBatis源码 1.3 源码分析的5大原则 2 ...
- 敖夜肝了这份Scrapyd核心源码剖析及爬虫项目实战部署
文章目录 1. Scrapyd它是什么 2. Scrapyd安装与启动 3. Scrapyd源码文件剖析 4. Srapyd API源码剖析 5. 开启Scrapyd远程访问 6. 安装Scrapyd ...
- springboot 自动装配_Java互联网架构-SpringBoot自动装配核心源码剖析
欢迎关注头条号:java小马哥 周一至周日早九点半!下午三点半!精品技术文章准时送上!!! 精品学习资料获取通道,参见文末 用了差不多两年的SpringBoot了,可以说对SpringBoot已经很熟 ...
- HDFS 双缓冲技术核心源码剖析
本文大纲 一.HDFS 是大数据的基石 我们都知道,HDFS 是大数据存储的基石,所有的离线数据都存储在 HDFS 上,而 NameNode 是存储所有元数据的地方(所谓元数据就是描述数据的数据,比如 ...
- 「Kafka核心源码剖析系列」4. 走进Kafka服务端(下)
作者 | 吴邪 大数据4年从业经验,目前就职于广州一家互联网公司,负责大数据基础平台自研.离线计算&实时计算研究 编辑 | auroral-L 全文共6710字,预计阅读35分钟. 第四章 ...
- SpringBoot初始化过程核心源码剖析
前言 首先我们启动一个SpringBoot项目是怎么启动的?是依着Main方法中的SpringApplication.run(args);这个方法来进行启动的,很多人都对这个有点误解,以为是@Spri ...
- JDK核心源码深入剖析(synchronized和ConcurrentHashMap)
JDK核心源码深入剖析(synchronized和ConcurrentHashMap) JDK核心源码深入剖析 1 同步锁synchronized追本溯源 1.1 synchronized场景回顾 1 ...
- XXL-JOB核心源码解读及时间轮原理剖析
你好,今天我想和你分享一下XXL-JOB的核心实现.如果你是XXL-JOB的用户,那么你肯定思考过它的实现原理:如果你还未接触过这个产品,那么可以通过本文了解一下. XXL-JOB的架构图(2.0版本 ...
- halfstone 原理_HashMap的结构以及核心源码分析
摘要 对于Java开发人员来说,能够熟练地掌握java的集合类是必须的,本节想要跟大家共同学习一下JDK1.8中HashMap的底层实现与源码分析.HashMap是开发中使用频率最高的用于映射(键值对 ...
最新文章
- Recall(召回率)和 sensitivity(灵敏性)是同一个概念,其他无相同点
- 绕开数学,讲讲信息论
- linux正则表达式awk讲解
- POJ 3522 Slim Span (Kruskal枚举最小边)
- 条理清晰的搭建SSH环境之添加所需jar包
- linux ospf 命令,Linux运维知识之linux下使用quagga配置ospf协议
- Java小知识-----Map 按Key排序和按Value排序
- 蓝色版去水印小程序源码+接口
- 内存类型范围寄存器 (MTRR)
- 解决Python3 pip list 红色DEPRECATION
- Prototype对象
- acdsee pro3 安装序列号
- Rainmeter新手教程
- 吉林大学学生邮箱接收服务器地址
- 基于51单片机的音乐盒彩灯频谱喷泉原理图方案设计
- 企查查等人物关系图谱、企业图谱等效果
- Redis的性能瓶颈
- ACM一年总结(写于2011年11月18日)
- CentOS7-Docker-DockerFile-05
- ttl低电平接大电阻_电压不稳定?那是你不懂上拉/下拉电阻原理,5分钟教你应用!...
热门文章
- 由微信2019公开课学到的
- python cms_基于flask的开源cms有哪些
- tio-http-server 源码浅析(二)Http请求的处理HttpRequestHandler
- step fpga上实现呼吸灯和交通灯
- 程序员式贪吃蛇,URL贪吃蛇和源码贪吃蛇你值得一玩
- golang入门笔记—ES
- 英伟达计划消除人工智能在放射学中的“焦虑”
- 软件工程师职业道德规范_看一下三个职业道德规范的最新更新
- file://android,asset/hto,位于 file:///android_asset/www/..的网页无法加载
- lte协议软件 开源的4g_lte协议软件 开源的4g_Wi-Fi和4G大PK!谁网速快?谁耗电多?和你想的一样吗?...