1.官网的文档真的是太简陋了啊
按月份分表的详细文章请戳这里
Shardingsphere香还是挺香的,但是文档真的是太少内容了啊.而且对集成SpringBoot太不友好了(▼皿▼)
2.分库分表的配置
谈一谈我对分库的理解. 分库之后我们都会遵循一个规则就是主库负责写入更新, 从库负责读取.Shardingsphere在配置好主从库之后会自动路由,select的时候直接走从库. 因此最关键的一点就是如何在yml文件中配置主从库.
先看配置:
spring:
shardingsphere:
datasource:
names: master, slave0 # 数据源名称
master:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://masterip/database?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false
username: master
password: masterpassword
slave0:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://followip/database?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false
username: follower
password: followerpassword
sharding:
master-slave-rules:
ds0:
master-data-source-name: master
slave-data-source-names: slave0
tables:
barrage_analyse: # 表名
actual-data-nodes: ds0.barrage_analyse_$->{2020..2030}0$->{1..9}, ds0.barrage_analyse_$->{2020..2030}$->{10..12}
table-strategy:
standard:
sharding-column: date # 分片键
precise-algorithm-class-name: com.bihu.kankan.config.TablePreciseShardingAlgorithm # 实现类的完全限定类名
range-algorithm-class-name: com.bihu.kankan.config.TableRangeShardingAlgorithm
#打印sharding的日志
props:
sql:
show: true
关键配置都在头部, 可以和第一篇文章(SpringBoot+JPA+ShardingSphere4.x单库按月份分表)的配置进行对比
- 配置主从库的连接, 配置连接时我们写的master, slave0等只是为了区分. 主从库还需要显式的指定
- master-slave-rules, 这里显式的指定主从库配置
- slave-data-source-names 示例中只配置了一个从库, 如果有多个从库用逗号分隔开就行
关键点就这么多,比较难的一点在于分库配置和分表配置的整合. 请注意 ds0的位置, 这个就是整合的关键. 我解释不清Shardingsphere为何需要这样配置,但是只有这样配置才能正确运行.
读请求:
写请求: