ShardingSphere代码阅读(二)
探索阅读源码的最佳姿势
前言
上一篇说到阅读源码前需要准备什么,热身结束后开始,就需要探索阅读源码的最佳姿势,其实就是合适自己的一种阅读方式。
一、明确目标,带着问题看
在看源码之前,先要明确一下目标,带着一个问题深入源码中找答案,正所谓源码之下无秘密。如果没有带着疑问看源码是啃不下去的,再从官方提供的demo入手,慢慢摸索。
问题:ShardingSphere是如何实现把数据insert到不同的DB和tables
二、ShardingSphere-JDBC-core 源码
ShardingSphere-JDBC的demo中 有关实现有两种方式,分别是Java api和 yaml 配置,因此分别展开探究其实现
1.Java API
入口-过程-结果
进行SQL的插入,首先需要创建对应的数据源实例,进入其中,看看是如何构建和区分不同实例的,根据上图的demo是根据枚举进行区别不同实例创建
从上图中可以知道,会创建数据源的map和ShardingSphere规则参数,这两部分对应的就是有多少个物理表和库,其映射关系、规则的配置,那么到底如何将这两部分结合并且实现其功能的,继续往下探究ShardingSphere是如何设计的
从上图可以看出,modeConfig几乎可以确认的是,只要为空,必然new一个Memory 使用,除此之外,也是写死第一个参数,schemaName=logic_db,意思明确是logic数据库,那到底是有什么用处的呢?
构建ShardingSphere和Mysql之间的关系,建立映射,
从结果上看,是把两个实体数据库绑定在logic_db上了,
logic_table也都是在初期写好的,在创建sharing规则配置时的策略配置,继续看看,当插入数据,是如何划分库表的
从构建的关系来看,t_order表示一个logic表,并不是实质的的数据表,如果直接插入数据库中,必然会报错,告诉我们这张表并不存在,所以就去下图中的 createLogicSQL(sql),但是logic SQL可以很直观知道这个SQL是给ShardingSphere使用的
构建后的logicSQL给kernelPro