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

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核心源码剖析相关推荐

  1. MyBatis核心源码剖析(SqlSession XML解析 Mapper executor SQL执行过程 自定义类型处理器 缓存 日志)

    MyBatis核心源码剖析 MyBatis核心源码剖析 1 MyBatis源码概述 1.1 为什么要看MyBatis框架的源码 1.2 如何深入学习MyBatis源码 1.3 源码分析的5大原则 2 ...

  2. 敖夜肝了这份Scrapyd核心源码剖析及爬虫项目实战部署

    文章目录 1. Scrapyd它是什么 2. Scrapyd安装与启动 3. Scrapyd源码文件剖析 4. Srapyd API源码剖析 5. 开启Scrapyd远程访问 6. 安装Scrapyd ...

  3. springboot 自动装配_Java互联网架构-SpringBoot自动装配核心源码剖析

    欢迎关注头条号:java小马哥 周一至周日早九点半!下午三点半!精品技术文章准时送上!!! 精品学习资料获取通道,参见文末 用了差不多两年的SpringBoot了,可以说对SpringBoot已经很熟 ...

  4. HDFS 双缓冲技术核心源码剖析

    本文大纲 一.HDFS 是大数据的基石 我们都知道,HDFS 是大数据存储的基石,所有的离线数据都存储在 HDFS 上,而 NameNode 是存储所有元数据的地方(所谓元数据就是描述数据的数据,比如 ...

  5. 「Kafka核心源码剖析系列」4. 走进Kafka服务端(下)

    作者 | 吴邪   大数据4年从业经验,目前就职于广州一家互联网公司,负责大数据基础平台自研.离线计算&实时计算研究 编辑 | auroral-L 全文共6710字,预计阅读35分钟. 第四章 ...

  6. SpringBoot初始化过程核心源码剖析

    前言 首先我们启动一个SpringBoot项目是怎么启动的?是依着Main方法中的SpringApplication.run(args);这个方法来进行启动的,很多人都对这个有点误解,以为是@Spri ...

  7. JDK核心源码深入剖析(synchronized和ConcurrentHashMap)

    JDK核心源码深入剖析(synchronized和ConcurrentHashMap) JDK核心源码深入剖析 1 同步锁synchronized追本溯源 1.1 synchronized场景回顾 1 ...

  8. XXL-JOB核心源码解读及时间轮原理剖析

    你好,今天我想和你分享一下XXL-JOB的核心实现.如果你是XXL-JOB的用户,那么你肯定思考过它的实现原理:如果你还未接触过这个产品,那么可以通过本文了解一下. XXL-JOB的架构图(2.0版本 ...

  9. halfstone 原理_HashMap的结构以及核心源码分析

    摘要 对于Java开发人员来说,能够熟练地掌握java的集合类是必须的,本节想要跟大家共同学习一下JDK1.8中HashMap的底层实现与源码分析.HashMap是开发中使用频率最高的用于映射(键值对 ...

最新文章

  1. Recall(召回率)和 sensitivity(灵敏性)是同一个概念,其他无相同点
  2. 绕开数学,讲讲信息论
  3. linux正则表达式awk讲解
  4. POJ 3522 Slim Span (Kruskal枚举最小边)
  5. 条理清晰的搭建SSH环境之添加所需jar包
  6. linux ospf 命令,Linux运维知识之linux下使用quagga配置ospf协议
  7. Java小知识-----Map 按Key排序和按Value排序
  8. 蓝色版去水印小程序源码+接口
  9. 内存类型范围寄存器 (MTRR)
  10. 解决Python3 pip list 红色DEPRECATION
  11. Prototype对象
  12. acdsee pro3 安装序列号
  13. Rainmeter新手教程
  14. 吉林大学学生邮箱接收服务器地址
  15. 基于51单片机的音乐盒彩灯频谱喷泉原理图方案设计
  16. 企查查等人物关系图谱、企业图谱等效果
  17. Redis的性能瓶颈
  18. ACM一年总结(写于2011年11月18日)
  19. CentOS7-Docker-DockerFile-05
  20. ttl低电平接大电阻_电压不稳定?那是你不懂上拉/下拉电阻原理,5分钟教你应用!...

热门文章

  1. 由微信2019公开课学到的
  2. python cms_基于flask的开源cms有哪些
  3. tio-http-server 源码浅析(二)Http请求的处理HttpRequestHandler
  4. step fpga上实现呼吸灯和交通灯
  5. 程序员式贪吃蛇,URL贪吃蛇和源码贪吃蛇你值得一玩
  6. golang入门笔记—ES
  7. 英伟达计划消除人工智能在放射学中的“焦虑”
  8. 软件工程师职业道德规范_看一下三个职业道德规范的最新更新
  9. file://android,asset/hto,位于 file:///android_asset/www/..的网页无法加载
  10. lte协议软件 开源的4g_lte协议软件 开源的4g_Wi-Fi和4G大PK!谁网速快?谁耗电多?和你想的一样吗?...