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 各个版本配置各有不同,告诫大家不要一味的去 “碰对的方案”
优劣
- 优:配置拆分,清晰明了,方便维护
- 劣:对于远程配置化项目比较麻烦
参考资料
- ShardingSphere 中文官网
- deepseek 搜索