当前位置: 首页 > news >正文

Springboot 学习 之 Shardingsphere 按照日期水平分表(一)

文章目录

  • 业务场景
  • 依赖
  • 配置
  • 特别注意
  • 优劣
  • 参考资料

业务场景

报表大数据量 且需要 按照日期显示 的业务场景下,按照 日期水平分表 是一个不错的选择

依赖

	<parent>
	    <groupId>org.springframework.boot</groupId>
	    <artifactId>spring-boot-starter-parent</artifactId>
	    <version>2.7.17.RELEASE</version>
	    <relativePath/> <!-- lookup parent from repository -->
	</parent>
    <dependency>
        <groupId>org.apache.shardingsphere</groupId>
        <artifactId>shardingsphere-jdbc-core</artifactId>
        <version>5.4.1</version>
    </dependency>
    <dependency>
        <groupId>org.yaml</groupId>
        <artifactId>snakeyaml</artifactId>
        <version>1.33</version>
    </dependency>

配置

bootstrap.yml

spring:
  datasource:
    driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver
    url: jdbc:shardingsphere:classpath:sharding-jdbc-config.yml

sharding-jdbc-config.yml

# 模式配置
mode:
  type: Standalone      # 单机模式
  repository:
    type: JDBC          # 存储类型
props:
  sql-show: true        # 是否打印 SQL

# 数据源配置
dataSources:
  ds0: # 数据源名称
    dataSourceClassName: com.zaxxer.hikari.HikariDataSource
    driverClassName: com.mysql.jdbc.Driver
    jdbcUrl: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false   # 部分数据源属性为 url
    username: root
    password: rootpassword

# 规则配置
rules:
  - !SINGLE   # 单表规则
    tables:
      - "*.*"  # 所有表
  - !SHARDING # 分片标签
    tables:   # 表规则
      DASHBOARD_CUS_DATE:   # 逻辑表名称
        actualDataNodes: ds0.DASHBOARD_CUS_DATE_$->{20250101..20991231} # 官方建议 $->{} 写法,而非 ${};起始位 20250101 对应的物理表必须存在,否则报 TABLE DON'T EXIST
        tableStrategy:      # 表策略
          standard:         # 标准分片策略
            shardingColumn: STATISTIC_DT  # 分片列
            shardingAlgorithmName: DASHBOARD_CUS_DATE_INTERVAL   # 分片算法名称
#        keyGenerateStrategy:  # 主键生成策略
#          column: ID  # 主键列
#          keyGeneratorName: snowflake   # 主键生成器名称
    defaultDataSource: ds0
    defaultDatabaseStrategy:
      none:
    defaultTableStrategy:
      none:
    shardingAlgorithms: # 分片算法
      DASHBOARD_CUS_DATE_INTERVAL:  # 分片算法名称,大小写不敏感
        type: INTERVAL  # 时间分片算法
        props:         # 分片算法属性
          datetime-pattern: 'yyyy-MM-dd'            # 时间格式
          datetime-lower: '2025-01-01'              # 起始时间
          datetime-upper: '2099-12-31'              # 结束时间
          datetime-interval-amount: 1               # 时间间隔长度
          datetime-interval-unit: 'DAYS'            # 时间间隔单位
          datetime-suffix-pattern: 'yyyyMMdd'       # 时间后缀格式

#    keyGenerators: # 主键生成器
#      snowflake:
#        type: SNOWFLAKE
#        props:
#          worker-id: 123

特别注意

  • 水平分表时,如果未配置自动分表(autoTables 标签,从 5.3.0 开始支持),最好手动将涉及的物理表都创建好,否则很可能遇到 Table doesn't exist 错误
  • 分片算法名称注意大小写,虽然原生的 shardingsphere-jdbc-core 大小写不敏感,但是你懂得…
  • 分片规则可以优化,粗暴的匹配范围太大
  • Shardingsphere 各个版本配置各有不同,告诫大家不要一味的去 “碰对的方案”

优劣

  • 优:配置拆分,清晰明了,方便维护
  • 劣:对于远程配置化项目比较麻烦

参考资料

  1. ShardingSphere 中文官网
  2. deepseek 搜索

相关文章:

  • Swift 二分法求函数的近似解
  • Ubuntu20.04系统安装IsaacSim4.5与IsaacLab环境
  • html和css 实现元素顺时针旋转效果(椭圆形旋转轨迹)
  • MongoDB 的索引是提高查询性能的核心机制,类似于传统关系型数据库的索引。以下是对 MongoDB 索引的详细说明:
  • 基础实验2-2.1 整数的分类处理
  • openresty-nginx添加新模块
  • 机器学习中的 K-均值聚类算法及其优缺点
  • 什么是Dify,以及我们能用它来做什么
  • 开源AI大模型赋能私域流量:S2B2C场景下品牌文化建构的智能路径研究
  • Micropython RPI-PICO 随记-双PICO串口传数据
  • VMware Workstation虚拟机固定IP配置(主机互通、外网可访问)
  • 【Windows计算机常识】查看IP配置
  • 热门面试题第14天|Leetcode 513找树左下角的值 112 113 路径总和 105 106 从中序与后序遍历序列构造二叉树 (及其扩展形式)以一敌二
  • 【深度学习】GAN生成对抗网络:原理、应用与发展
  • 理解Kubernetes中CoreDNS域名解析与DNS策略
  • 蓝桥杯备考----->Cow Picnic (BFS)
  • redis--JavaSpring客户端
  • Modbus协议详细规范
  • MySQL基础语法
  • 英语+C语言:3.24
  • 微信网站建设热线/互联网销售平台有哪些
  • wordpress搭建商城网站/交换链接营销
  • 平度网站建设/怎么提升关键词的质量度
  • 设计室内效果图设计/微博关键词排名优化
  • 网站建设呼和浩特/如何进行网站的推广
  • 阿里云免费网站/今日新闻快讯