文章目錄
- 業務場景
- 依賴
- 配置
- 特別注意
- 優劣
- 參考資料
業務場景
在 報表
等 大數據量
且需要 按照日期顯示
的業務場景下,按照 日期水平分表
是一個不錯的選擇
依賴
<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 # 是否打印 SQLdataSources: # 數據源配置names: ds0ds0: # 數據源名稱type: com.zaxxer.hikari.HikariDataSourcedriverClassName: com.mysql.jdbc.DriverjdbcUrl: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=falseusername: rootpassword: rootpasswordrules: # 規則配置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 EXISTtableStrategy: # 表策略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
屬性內容加載失敗
優劣
- 優:遠程配置方便,與常規項目一般無二
- 劣:大雜燴,都放在一起
參考資料
- ShardingSphere 中文官網