整体流程

image.png

SQL解析

  • 分为词法解析和语法解析。 先通过词法解析器将SQL拆分为一个个不可再分的单词。再使用语法解析器对SQL进行理解,并最终提炼出解析上下文。 解析上下文包括表、选择项、排序项、分组项、聚合函数、分页信息、查询条件以及可能需要修改的占位符的标记。

    执行器优化

  • 合并和优化分片条件,如OR等。

    SQL路由

  • 根据解析上下文匹配用户配置的分片策略,并生成路由路径。目前支持分片路由和广播路由。

    SQL改写

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

    SQL执行

  • 通过多线程执行器异步执行。

    结果归并

  • 将多个执行结果集归并以便于通过统一的JDBC接口输出。结果归并包括流式归并、内存归并和使用装饰者模式的追加归并这几种方式。

    核心流程

    sharding-jdbc核心流程图.png