shardingsphere加载过程


一、关键组件说明

  1. ​​@EnableSharding​ ​ / ​​ShardingAutoConfiguration​​:Spring Boot 自动配置入口。

  2. ​​ShardingSphereDataSource​​:ShardingSphere 的入口 DataSource 实现。

  3. ​​ShardingRule​​:分片规则配置核心。

  4. ​​ShardingSphereOptimizer​​:SQL 优化器。

  5. ​​ShardingEngine​​:分片 SQL 执行引擎。

  6. ​​SQLRouter​​:SQL 分片路由器。


二、整体加载时序图


三、分阶段详细加载流程

阶段1:配置加载阶段(应用启动时)

​​关键步骤详解​​:

  1. ​​配置解析​​:

    复制代码
    # application.yml 配置示例
    spring:
      shardingsphere:
        datasource:
          names: ds0, ds1
          ds0: # 实际数据源配置...
          ds1: # 实际数据源配置...
        rules:
          sharding:
            tables:
              t_order: 
                actualDataNodes: ds${0..1}.t_order_${0..1}
                databaseStrategy: # 分库策略
                tableStrategy:   # 分表策略
  2. ​​规则构建​​:

    • 解析 actualDataNodes生成物理表映射。

    • 初始化分片算法(精确、范围、复合分片等)。

阶段2:SQL 执行阶段(运行时)

​​路由阶段详细流程​​:

  1. ​​SQL 解析​​:将 SQL 解析为抽象语法树,识别查询类型、表名、条件等。

  2. ​​分片键提取​​:从 WHERE 条件中提取分片键值。

  3. ​​路由计算​​:根据分片算法确定目标数据源和表。

    复制代码
    // 分片算法示例
    String actualTable = "t_order_" + (userId % 2); // 分表
    String actualDataSource = "ds" + (userId / 10 % 2); // 分库
  4. ​​SQL 改写​​:将逻辑表名替换为物理表名。


四、核心扩展点加载时序

1. 自定义分片算法加载

​​配置示例​​:

复制代码
spring:
  shardingsphere:
    rules:
      sharding:
        shardingAlgorithms:
          order-db-algorithm:
            type: CLASS_BASED
            props:
              strategy: standard
              algorithmClassName: com.example.OrderDatabaseShardingAlgorithm
2. 分布式序列生成器加载

五、Spring Boot 集成详细时序

自动配置类加载顺序:
  1. ​​ShardingSphereAutoConfiguration​​:主配置类

  2. ​​ShardingSphereDataSourceConfiguration​​:数据源配置

  3. ​​ShardingRuleConfiguration​​:规则配置

  4. ​​PropertiesConfiguration​​:属性配置

​​代码层面的加载调用栈​​:

复制代码
// 1. Spring Boot启动
SpringApplication.run() 
  → ShardingSphereAutoConfiguration
    → ShardingSphereDataSourceFactory.createDataSource()
      → YamlShardingSphereDataSourceFactory.createDataSource()  // 解析YAML
        → ShardingSphereDataSource()  // 创建数据源
          → ShardingRule()  // 初始化分片规则
          → Metadata()  // 元数据管理

六、常见问题定位时序

场景1:启动时报 Sharding rule configuration is invalid
  • ​​时序定位​​:阶段1的第5步(规则验证)

  • ​​检查点​​:

    • 分片算法配置是否正确

    • 实际数据节点映射是否存在

场景2:执行SQL时报 No database route info
  • ​​时序定位​​:阶段2的第4步(路由计算)

  • ​​检查点​​:

    • 分片键是否包含在查询条件中

    • 分片算法返回值是否在数据节点范围内

场景3:性能问题 Slow SQL
  • ​​时序定位​​:阶段2的第7步(并行执行)

  • ​​检查点​​:

    • 是否产生笛卡尔积路由(需要优化分片策略)

    • 结果归并是否内存溢出(大数据集分页优化)


七、关键配置参数影响时序

复制代码
spring:
  shardingsphere:
    props:
      # 影响阶段2的第2步:SQL解析缓存
      sql-show: true
      # 影响阶段2的第7步:最大连接数
      max-connections-size-per-query: 1
      # 影响阶段2的第8步:结果集归并方式
      kernel-executor-size: 10

通过理解 ShardingSphere 的加载时序,可以更好地进行性能调优和问题排查!

相关推荐
samble2 天前
从零搭建半导体设备上位机(九):拖拽与交互,Adorner、DragDrop 与晶圆拖放信息
wpf·拖拽·adorner
郝学胜-神的一滴4 天前
AI 编程智能体 27:吃透MCP通信机制
人工智能·python·langchain·wpf·numpy·scikit-learn
波力海苔夹心脆6755 天前
C# WPF 资源字典详解:ResourceDictionary、MergedDictionaries 与自定义控件案例
开发语言·c#·wpf·入门教程·resource·资源字典
陈仓主教5 天前
# WPF CheckBox 控件详解与使用—WPF 中的控件(6)--复选框控件(CheckBox)
wpf
光泽雨7 天前
WPF 音视频四大核心方案对比
wpf·音视频
浪扼飞舟7 天前
WPF(数据绑定)
wpf
samble8 天前
从零搭建半导体设备上位机(四):单实例、启动流程与配置文件,App 里那 526 行到底在干什么
wpf·配置文件·单实例
浪扼飞舟9 天前
WPF(控件的继承树、内容控件、布局控件)
wpf
avi911112 天前
电影开源Jevdo - 源码介绍(vue版)没有android 和 没有wpf
android·wpf·框架·数据爬虫·meego·电影管理
吾与谁归in13 天前
C#脚本工具,支持智能提示自动补全(WPF + Roslyn + AvalonEdit)
开发语言·c#·wpf