【ShardingSphere 2】shardingsphere简单源码解析

源码分析

解析->路由->改写->执行->归并

  1. 初始化过程

ShardingDataSourceFactory.createDataSource

ShardingRule 分片规则通过配置加载到内存中

  1. SQL执行过程
    (上下文)
    ShardingStatement.executeQuery

    Statement SqlRoute
    statementEngine.route
    StanndardRoutingEngine
    SQLRewriteEngine
    SQLRewriteEngine.generateSQL
    SQLExecuteCallback.executeSQL //StatmentExecutor.executeQuery()多线程执行,同时执行多个sql

关键类
ShardingRouter.route

ParsingSQLRouter.parse

  • SQL 语法解析
    LexerEngine

  • SQL解析引擎
    RoutingEngineFactory.

  • 改写引擎
    SQLRewritEngine

比如 *** DESC limit 1,2
要改写成 limit 0,3
因为是倒序。直接用原来的limit可能会将需要到的结果截断。

  • 执行引擎
    ShardingExecuteEngine

  • 归并引擎
    MergeEngine

简单的 归并,获取limit x,y

优先队列。
每个分表获取的结果形成一个有序队列。然后用每个队列的第一个进行比较,每次需要就弹出一个。没有对其进行所有的合并。

clear 清空
sqlRoute(sql)
initStatementExecutor()

  • 读写分离
    MasterSLave路由

MasterSlaveRouter.route
-> SQLJudgeEngine.judge