当前位置: 首页 > 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-spring-boot-starter</artifactId>
        <version>5.2.1</version>
    </dependency>
    <dependency>
        <groupId>org.yaml</groupId>
        <artifactId>snakeyaml</artifactId>
        <version>1.33</version>
    </dependency>

配置

bootstrap.yml

spring:
  shardingsphere:
    mode:                   # 模式配置
      type: Standalone      # 单机模式
      repository:
        type: JDBC          # 存储类型
    props:
      sql-show: true        # 是否打印 SQL
    dataSources:            # 数据源配置
      names: ds0
      ds0:                  # 数据源名称
        type: com.zaxxer.hikari.HikariDataSource
        driverClassName: com.mysql.jdbc.Driver
        jdbcUrl: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false
        username: root
        password: rootpassword
    rules:                  # 规则配置
      sharding:             # 分片标签
        tables:             # 表规则
          DASHBOARD_CUS_DATE:   # 逻辑表名称
            actualDataNodes: ds0.DASHBOARD_CUS_DATE_$->{2024..2099}$->{(1..12).collect{m -> sprintf('%02d', m)}}$->{(1..31).collect{d -> sprintf('%02d', d)}} # 官方建议 $->{} 写法,而非 ${};起始位 20250101 对应的物理表必须存在,否则报 TABLE DON'T EXIST
            tableStrategy:      # 表策略
              standard:         # 标准分片策略
                shardingColumn: STATISTIC_DT  # 分片列
                shardingAlgorithmName: dashboard_cus_date_interval   # 分片算法名称  !!!禁止大写
        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'       # 时间后缀格式

特别注意

  • 水平分表时,如果未配置自动分表(autoTables 标签,从 5.3.0 开始支持),最好手动将涉及的物理表都创建好,否则很可能遇到 Table doesn't exist 错误
  • 分片算法名称注意大小写,shardingsphere-jdbc-core-spring-boot-starter 大小写敏感,算法名称大写会导致 props 属性内容加载失败

优劣

  • 优:远程配置方便,与常规项目一般无二
  • 劣:大杂烩,都放在一起

参考资料

  1. ShardingSphere 中文官网

相关文章:

  • c++ map和vector模板类
  • mysql创建库表插入数据演示
  • 《时间编码》
  • 【零基础学python】python高级语法(三)
  • MySQL学习之用户管理
  • 十五天-动态规划
  • 6.1 模拟专题:LeetCode 1576. 替换所有的问号
  • Android studio组合教程--做出一个类似于QQ的登录页面
  • vue2前端日志数据存储,推荐(IndexedDB)
  • 数据类设计_图片类设计_矩阵图类型和像素图类型设计的补充
  • 【CC2530 教程 十】CC2530 Z-Stack 协议栈
  • 基于微信小程序的医院挂号预约系统设计与实现【lw+源码+部署+讲解】
  • 小程序跳转到h5页面
  • 双指针技巧在C++中的应用:从基础到进阶
  • MATLAB 中,并行池(Parallel Pool)自动关闭的情况
  • AI比人脑更强,因为被植入思维模型【24】替身决策思维模型
  • 详细说明windows系统函数::SetUnhandledExceptionFilter(ExceptionFilter)
  • 哈希表简单例子
  • BCC-调度组件分析
  • Skynet.socket 函数族使用详解
  • 如何选择顺德网站建设/济南做网站公司
  • 无锡企业网站的建设/全球新冠疫情最新消息
  • 中国建设银行 英文网站/长沙关键词排名软件
  • 短视频营销的概念/外贸网站优化
  • seo网站推广可以自己搞吗/如何自己建设网站
  • 网站建设亇金手指下拉排名罒/东莞网络推广营销公司