在这篇文章中,我们将主要了解ShardingSphere进行分库分表的底层原理,并且深入到源码了解分库分表的实际运行过程。一方面,我们之前的文章中学习Sharding-JDBC时,积累了大量的测试实例,对于学习底层原理是非常好的学习入口。另一方面,也是为了后面学习ShardingProxy做准备。因为对于ShardingProxy,如果只是学会几个简单的配置和指令,是无法在实际工作中用好的,而ShardingProxy作为一个黑盒产品,要通过ShardingProxy来了解底层原理是比较困难的。
一、内核剖析
ShardingSphere虽然有多个产品,但是他们的数据分片主要流程是完全一致的。
二、解析引擎
解析过程分为词法解析和语法解析。词法解析器用于将SQL拆解为不可再分的原子符号,称为Token。并根据不同数据库方言所提供的字典,将其归类为关键字,表达式,字面量和操作符。再使用语法解析器将SQL转换为抽象语法树(简称AST,Abstract Syntax Tree)。
例如对下面一条SQL语句:
SELECT id, name FROM t_user WHERE status = 'ACTIVE' AND age > 18
会被解析成下面这样一颗树: