ShardingSphere源码分析1-初探JDBC

目标

每组选择自己分析的功能模块,可以重复,每人完成第一篇源码学习分析文档。

首先,要了解ShardingSphere的整体架构,以及各个模块的大致功能,对各个模块的重要程度有个比较和评分;

接着,选择其中最核心、最关键的模块(也可以是自己最感兴趣的,但开始阶段,还是建议从最核心模块入手),着手分析各个功能点是如何实现的,并记录过程,输出总结。

分析步骤

  1. 明确本次阅读的目标,带着问题去阅读源码,如:JDBC里的分库逻辑是如何实现的?
  2. 找到代码执行入口
  3. 顺着每一步方法实现往下跟
  4. debugger项目,验证猜想
  5. 记录过程,代码的关键处添加注释,加深印象

解读源码

目标一:探索ShardingSphere-JDBC中一条SQL语句是如何一步步执行的

代码执行入口

基于该系列的第一步:juejin.cn/post/699965… ,选择了样例中的org.apache.shardingsphere.example.sharding.raw.jdbc.ShardingRawJavaConfigurationExample(熟悉点,好上手),shardingType选择了SHARDING_DATABASES(分库)

关键代码

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

debugger验证猜想

image.png

记录执行流程

总结下来,SQL从statement到了executor

目标二:探索ShardingSphere-JDBC中分库的逻辑是如何实现的

基于目标一的几个现象

image.png F9,让程序跳到下一个断点: image.png 可以看到:数据库发生了变化,变化的这一步如何实现呢?猜想是在这一步实现:

DataSourceMetaData dataSourceMetaData = getDataSourceMetaData(jdbcExecutionUnit.getStorageResource().getConnection().getMetaData());
复制代码

继续跟进代码实现

debugger验证猜想

总结

个人觉得今天的收获:

  1. 一开始就明确目标——这次阅读的目标是什么,要搞懂哪一块问题或者知识点
  2. 添加注释——在关键代码上添加注释,有助于记忆和后续的回顾
  3. 画流程图梳理——相当于整理和巩固,画的过程也能帮助自己理清思路,特别是那种调用特别深的实现,留一份流程图,过段时间重新看,能快速回忆起来
  4. 记录和总结——记录下自己找问题花了多少时间,过程里走了哪些弯路,有没有可以改进的地方,比如技巧方法上。因为不可否认,扒源码是个特别费时费力的事情,在这上面如果能做到快速高效,绝对功力大增
分类:
后端
标签: