天天看点

分库分表 Sharding: 5. 分片流程与 Sharding 核心问题

5.    分片流程与 Sharding 核心问题

5.1    Bee (JDBC 部分) 的转换流程

Bee 基于 JDBC 操作数据库的流程如下:

1) 使用实体 Javabean (+ 条件表达式 Condtion,对应 SQL 的 where 表达式) 传达操作 DB 的信息;

2) 解析成 DB 能识别的 sql 语句;

3) 调用 JDBC 操作数据库;

4) 处理并返回操作结果。

其中 2)~4) 由 Bee 框架负责,用户一般只需要关注 1) 对应的接口。

5.2    Bee Sharding 分片流程

1. Sharding 拦截器进行拦截,计算和收集分片涉及的数据源名称和表名称等分片信息;

2. 对象解析引擎解析对象 / Condtion 并产生 sql 语句;

3.BeeSql 操作数据库引擎,判断是否有分片;

 3.1 无分片或只是分片到一库一表,走无分片分支;

 3.2 有分片,将走分片分支;

   分片分为以下几种:一库多表;多库多表,只指定库 (全表);全库全表;(一库一表经过优化,不走分片)

   BeeSql 操作数据库引擎处理检测缓存是否有数据,有则返回;

   没有缓存,交由指定分片引擎处理;

   根据分片引擎,选择 4,5,6,7,8 进行处理。

4. 无排序,无分页的,如 delete,update, 单条 insert;

  ShardingModifyEngine 分片引擎

  4.1 改写 sql 引擎对 sql 改写,并记录对应的 ds 

  4.2 ShardingBeeSQLModifyExecutorEngine 引擎,执行分片

      a) 设置当前分片的 Ds;

      b) 交由 BeeSql 操作数据库引擎处理;

        路由到指定 Ds, 并获取相关 Connection;

        执行 Suid 操作,并返回结果;

  4.3 结果合并引擎合并结果

5. 查询分片

  ShardingSelectEngine 分片引擎

  5.1

    a) 若有分页,改写分页语句;

    改写 sql (OrderByPagingRewriteSql),

    并记录对应的 ds

  5.2 若是单库多表,且有分页,支持 union all, 不是多表查询,优化查询;

    //b) sql 语句替换表下标

    //c)union all  

    //d) 生成新的复合查询语句;

    //e) 加排序子句;(如果有)

    //f) 加分页,取指定页的一页记录

    //g) 调整参数缓存

   5.3 ShardingBeeSQLExecutorEngine 引擎,执行分片

      a) 设置当前分片的 Ds;

      b) 交由 BeeSql 操作数据库引擎处理;

        路由到指定 Ds, 并获取相关 Connection;

        执行 Suid 操作,并返回结果;

   5.4 结果合并引擎合并结果

   5.5 排序装饰

   5.6 分页装饰

      获取指定的一页数据

   5.7 记录结果到缓存;

   5.8 返回

6. 查询函数分片

  ShardingSelectFunEngine 分片引擎

  6.1 改写 sql 引擎对 sql 改写 (更新具体下标), 并记录对应的 ds

  6.2 ShardingBeeSQLFunExecutorEngine 引擎,执行分片

      a) 设置当前分片的 Ds;

      b) 交由 BeeSql 操作数据库引擎处理;

        路由到指定 Ds, 并获取相关 Connection;

        执行 Suid 操作,并返回结果;

  6.3 结果合并引擎合并结果

  6.4 另外,avg 要使用专门的 ShardingAvgEngine,进行改写 Sql, 合并结果,并处理结果.

7. 查询 Json 分片

  ShardingSelectJsonEngine 分片引擎

  该种处理,与 5 的查询分片引擎很类似。只是最后要将结果由 List 转为 Json.

8.ShardingSelectListStringArrayEngine

分片的 select 操作

专门为处理返回值是 List<String []> 的类型

5.3    Sharding 核心问题

5.3.1    改写 SQL

5.3.2    结果合并

5.3.3    排序

5.3.4    分页

5.3.5    查询 Json

Bee 源码地址:

​​https://gitee.com/automvc/bee​​

继续阅读