广州论坛建站模板建筑网站官网
文章目录
- 业务场景
- 依赖
- 配置
- 特别注意
- 优劣
- 参考资料
业务场景
在 报表
等 大数据量
且需要 按照日期显示
的业务场景下,按照 日期水平分表
是一个不错的选择
依赖
<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.ShardingSphereDriverurl: 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.HikariDataSourcedriverClassName: com.mysql.jdbc.DriverjdbcUrl: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false # 部分数据源属性为 urlusername: rootpassword: rootpassword# 规则配置
rules:- !SINGLE # 单表规则tables:- "*.*" # 所有表- !SHARDING # 分片标签tables: # 表规则DASHBOARD_CUS_DATE: # 逻辑表名称actualDataNodes: ds0.DASHBOARD_CUS_DATE_$->{20250101..20991231} # 官方建议 $->{} 写法,而非 ${};起始位 20250101 对应的物理表必须存在,否则报 TABLE DON'T EXISTtableStrategy: # 表策略standard: # 标准分片策略shardingColumn: STATISTIC_DT # 分片列shardingAlgorithmName: DASHBOARD_CUS_DATE_INTERVAL # 分片算法名称
# keyGenerateStrategy: # 主键生成策略
# column: ID # 主键列
# keyGeneratorName: snowflake # 主键生成器名称defaultDataSource: ds0defaultDatabaseStrategy: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 搜索