源码分析
解析->路由->改写->执行->归并
- 初始化过程
ShardingDataSourceFactory.createDataSource
ShardingRule 分片规则通过配置加载到内存中
- SQL执行过程
(上下文)
ShardingStatement.executeQueryStatement SqlRoute
statementEngine.route
StanndardRoutingEngine
SQLRewriteEngine
SQLRewriteEngine.generateSQL
SQLExecuteCallback.executeSQL //StatmentExecutor.executeQuery()多线程执行,同时执行多个sql
关键类
ShardingRouter.route
ParsingSQLRouter.parse
SQL 语法解析
LexerEngineSQL解析引擎
RoutingEngineFactory.改写引擎
SQLRewritEngine
比如 *** DESC limit 1,2
要改写成 limit 0,3
因为是倒序。直接用原来的limit可能会将需要到的结果截断。
执行引擎
ShardingExecuteEngine归并引擎
MergeEngine
简单的 归并,获取limit x,y
优先队列。
每个分表获取的结果形成一个有序队列。然后用每个队列的第一个进行比较,每次需要就弹出一个。没有对其进行所有的合并。
clear 清空
sqlRoute(sql)
initStatementExecutor()
- 读写分离
MasterSLave路由
MasterSlaveRouter.route
-> SQLJudgeEngine.judge