前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ShardingSphere的一些核心概念和核心过程

ShardingSphere的一些核心概念和核心过程

作者头像
路行的亚洲
发布2024-07-12 17:06:20
1220
发布2024-07-12 17:06:20
举报
文章被收录于专栏:后端技术学习

前面我们知道ShardingSphere需要执行五大核心流程,但是我们没有对五大核心流程有一个更深入的了解。也即五大过程做了什么事情。下面我们来了解两个概念以及五大核心流程。

一、何为绑定表?

表与表之间,如果是两个分表的库,此时关联查询会出现笛卡尔积查询的情况,也即是两者的排列组合。此时需要对其进行多余的去除处理。而绑定表的作用则建立两者关系的表。

二、何为广播表?

比如基础数据表,数据量不大,但频繁使用,此时可能很多地方需要用到,此时广播表就派上用场了。

三、分库分表的5大核心过程

解析、路由、改写、执行、归并。

代码语言:javascript
复制
 public ExecutionContext prepare(final String sql, final List<Object> parameters) {
        List<Object> clonedParameters = cloneParameters(parameters);
        // 先进行解析再执行路由
        RouteContext routeContext = executeRoute(sql, clonedParameters);
        ExecutionContext result = new ExecutionContext(routeContext.getSqlStatementContext());
        // 重写 这里是改写的核心
        result.getExecutionUnits().addAll(executeRewrite(sql, clonedParameters, routeContext));
        if (properties.<Boolean>getValue(ConfigurationPropertyKey.SQL_SHOW)) {
            SQLLogger.logSQL(sql, properties.<Boolean>getValue(ConfigurationPropertyKey.SQL_SIMPLE), result.getSqlStatementContext(), result.getExecutionUnits());
        }
        return result;
    }

1)解析:分为三个过程,解析、提取、填充。SqlParserEngine生成sql抽象语法树,通过SqlSegmentsExtractorEngine提取SQLStatement,以及通过SQLStatementFilter填充SQLStatement。

Sql解析的过程在之前的版本,使用的druid来做AST语法树解析,之后的版本,使用Antlr4实现对更多数据库的语法树解析和适配。

2)路由:通过对解析过程中生成的SQLStatement中所携带的上下文信息获取匹配数据库和表的分片策略,并生成路由结果。ShardingRouter分为预编译Statement和Statement。

3)改写:sql语句的改写是将原先的逻辑sql改成数据库中可以执行的sql语句,也即真实的sql语句。比如我们在分片算法中,定义了对应的路由算法,此时会根据对应的算法和对应的分片规则,需要进行正确的改写。而改写主要有两个作用:一种是用于分片逻辑的改写,一种是用于脱敏的改写。两者基于装饰者模式增强实现。核心接口:rewrite接口。

4)执行:执行具体的sql语句。

这个过程会将sql逐一执行,因此这个过程可能会执行多个sql语句。因此不免需要有归并的操作执行。

5)归并:经过路由改写之后,执行sql的语句可能有多条,此时就每个sql只是查询出来了结果的一部分,需要对sql查询的结果进行汇总,也即进行归并操作mergeQuery。

代码语言:javascript
复制
 MergedResult mergedResult = mergeQuery(preparedStatementExecutor.executeQuery());

 或者拿结果集的时候执行归并
  MergedResult mergedResult = mergeQuery(getQueryResults(resultSets));

四、什么时候会使用Statement或者PreparedStatement?

如果一个sql执行的次数只有一次,此时就会采用Statement,如果需要执行多次的时候,则会采用PreparedStatement。

五、分片策略

分片策略 => 分片算法 + 分片键

分片算法,通常我们可以进行重写,实现自己的个性化业务需求逻辑规则。还有数据库节点和分表节点定义等。

六、总结

本文简单梳理了一下相关概念和五大核心流程。由于业务需求开发需要,了解和看了一下ShardingSphere的源代码。发现之前在深入了解Seata之后,再来理解ShardingSphere,相对来说要容易很多。因为ShardingSphere的切入点是JDBC的整个过程的扩展,这个和Seata的思想是相通的,Seata在执行的过程中,也实现了自己的扩展。而为了实现扩展,ShardingSphere的作者对这一规范进行了扩展和改写,实现自己的扩展。从而实现在sql执行的过程中,能够根据业务需求的需要进行sql的解析、路由、改写、执行、归并。

参考:https://shardingsphere.apache.org/

https://github.com/apache/shardingsphere

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 后端技术学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、何为绑定表?
  • 二、何为广播表?
  • 三、分库分表的5大核心过程
  • 四、什么时候会使用Statement或者PreparedStatement?
  • 五、分片策略
  • 六、总结
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档