1 核心概念

  • 真实表 

物理表。

  • 逻辑表 

不考虑数据的实际存放位置,将分别存放在不同数据库分片中的数据,仍然使用同一个名称来操作的表结构的名称。这个名称就是逻辑表的表名。

  • 数据节点 

在分片之后,数据实际存放在某个数据库分片的位置信息。如节点1、节点2。

  • 绑定表 

指的是分片规则一致的关系表(主表、子表)。子表数据与有关联关系的主表数据,将存储在同一个数据库分片中。可以提升关联查询效率。

  • 广播表 

也称为全局表。在使用中,有些表没必要做分片,例如字典表、省份信息等,因为他们数据量不大,数据变化小,而且这种表可能需要与海量数据的表进行关联查询。

广播表会在所有的数据节点上都进行存储,并且存储的表结构和数据完全相同。

2 分片流程解析

ShardingJDBC 03_分片知识_数据

2.1 SQL解析

分为词法解析和语法解析。

先通过词法解析器将SQL拆分为一个个不可再分的单词。再使用语法解析器对SQL进行理解,并最终提炼出解析上下文。 

Sharding-JDBC采用不同的解析器对SQL进行解析,解析器类型如下: 

  • MySql 解析器 
  • Oracle 解析器 
  • SQLServer 解析器 
  • PostgreSql 解析器 
  • 默认解析器 sql-92 标准,当没有找到对应的解析器时,将使用默认解析器

2.2 查询优化

对接收到的SQL语句,进行合并及分片条件优化。 

2.3 SQL路由 

根据解析上下文匹配用户配置的分片策略,并生成路由路径。目前支持分片路由(用于做了分片设置的表)和广播路由(用于全局表)。 

2.4 SQL改写

将SQL改写为在物理数据库中可以正确执行的语句。SQL改写分为正确性改写和优化改写。 

2.5 SQL执行 

通过多线程执行器异步执行SQL,提高SQL执行效率。

2.6 结果归并

将多个执行结果集合并,以便于通过统一的JDBC接口输出。

结果归并包括流式归并、内存归并和使用装饰者模式的追加归并等方式。