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

203 篇文章 0 订阅
46 篇文章 0 订阅

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 源码地址:

bee: Bee,互联网新时代的Java ORM框架,支持Sharding;JDBC,Android,HarmonyOS;更快、更简单、更自动,开发速度快,运行快,更智能!

https://github.com/automvc/bee

Bee 经过 10 几个版本的迭代,ORM 的基本功能已趋于成熟稳定。

Bee 从 2.0 版本开始,将全面支持 Sharding 分库分表功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值