分库分表-节目服务
阅读此文前,建议小伙伴先阅读分库分表的前置知识,对分库分表 和 shardingsphere 有了大概的理解后,在继续阅读本文
介绍
在开始介绍前,需要先知道大麦网中数据库表的关系是怎么样,关于数据库表设计的详细介绍,小伙伴可跳转到相关文档
配置 引入 ShardingSphere 的相关依赖
<properties>
<shardingsphere.version>5.3.2</shardingsphere.version>
</properties>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-jdbc-core</artifactId>
<version>${shardingsphere.version}</version>
<exclusions>
<exclusion>
<artifactId>logback-classic</artifactId>
<groupId>ch.qos.logback</groupId>
</exclusion>
</exclusions>
</dependency>
根据规则进行分库分表的规则配置
节目项目相关配置:
spring:
datasource:
driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver
url: jdbc:shardingsphere:classpath:shardingsphere-program.yaml
shardingsphere-program.yaml配置:
dataSources:
# 第一个节目库
ds_0:
dataSourceClassName: com.zaxxer.hikari.HikariDataSource
driverClassName: com.mysql.cj.jdbc.Driver
jdbcUrl: jdbc:mysql://127.0.0.1:3306/damai_program_0?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai&autoReconnect=true
username: root
password: root
# 第一个节目库
ds_1:
dataSourceClassName: com.zaxxer.hikari.HikariDataSource
driverClassName: com.mysql.cj.jdbc.Driver
jdbcUrl: jdbc:mysql://127.0.0.1:3306/damai_program_1?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai&autoReconnect=true
username: root
password: root
rules:
- !SHARDING
tables:
# 对d_program表进行分库分表
d_program:
# 库为damai_program_0 damai_program_1 表为d_program_0 至 d_program_1
actualDataNodes: ds_${0..1}.d_program_${0..1}
# 分库策略
databaseStrategy:
standard:
# 使用id作为分片键
shardingColumn: id
# 使用id分库算法
shardingAlgorithmName: databaseProgramModModel
# 分表策略
tableStrategy:
standard:
# 使用id作为分片键
shardingColumn: id
# 使用id分表算法
shardingAlgorithmName: tableProgramModModel
# 对d_program_group表进行分库分表
d_program_group:
# 库为damai_program_0 damai_program_1 表为d_program_group_0 至 d_program_group_1
actualDataNodes: ds_${0..1}.d_program_group_${0..1}
# 分库策略
databaseStrategy:
standard:
# 使用id作为分片键
shardingColumn: id
# 使用id分库算法
shardingAlgorithmName: databaseProgramGroupModModel
# 分表策略
tableStrategy:
standard:
# 使用id作为分片键
shardingColumn: id
# 使用id分库算法
shardingAlgorithmName: tableProgramGroupModModel
# 对d_program_show_time表进行分库分表
d_program_show_time:
# 库为damai_program_0 damai_program_1 表为d_program_show_time_0 至 d_program_show_time_1
actualDataNodes: ds_${0..1}.d_program_show_time_${0..1}
# 分库策略
databaseStrategy:
standard:
# 使用id作为分片键
shardingColumn: program_id
# 使用id分库算法
shardingAlgorithmName: databaseProgramShowTimeModModel
# 分表策略
tableStrategy:
standard:
# 使用id作为分片键
shardingColumn: program_id
# 使用id分表算法
shardingAlgorithmName: tableProgramShowTimeModModel
# 对d_seat表进行分库分表
d_seat:
# 库为damai_program_0 damai_program_1 表为d_seat_0 至 d_seat_1
actualDataNodes: ds_${0..1}.d_seat_${0..1}
# 分库策略
databaseStrategy:
standard:
# 使用id作为分片键
shardingColumn: program_id
# 使用id分库算法
shardingAlgorithmName: databaseSeatModModel
# 分表策略
tableStrategy:
standard:
# 使用id作为分片键
shardingColumn: program_id
# 使用id分表算法
shardingAlgorithmName: tableSeatModModel
# 对d_ticket_category表进行分库分表
d_ticket_category:
# 库为damai_program_0 damai_program_1 表为d_ticket_category_0 至 d_ticket_category_1
actualDataNodes: ds_${0..1}.d_ticket_category_${0..1}
# 分库策略
databaseStrategy:
standard:
# 使用id作为分片键
shardingColumn: program_id
# 使用id分库算法
shardingAlgorithmName: databaseTicketCategoryModModel
# 分表策略
tableStrategy:
standard:
# 使用id作为分片键
shardingColumn: program_id
# 使用id分表算法
shardingAlgorithmName: tableTicketCategoryModModel
# 广播表
broadcastTables:
- d_program_category
# 具体的算法
shardingAlgorithms:
# d_program表分库算法
databaseProgramModModel:
type: MOD
props:
# 分库数量
sharding-count: 2
# d_program表分表算法
tableProgramModModel:
type: MOD
props:
# 分表数量
sharding-count: 2
# d_program_group表分库算法
databaseProgramGroupModModel:
type: MOD
props:
# 分库数量
sharding-count: 2
# d_program_group表分表算法
tableProgramGroupModModel:
type: MOD
props:
# 分表数量
sharding-count: 2
# d_program_show_time表分库算法
databaseProgramShowTimeModModel:
type: MOD
props:
# 分库数量
sharding-count: 2
# d_program_show_time表分表算法
tableProgramShowTimeModModel:
type: MOD
props:
# 分表数量
sharding-count: 2
# d_seat表分库算法
databaseSeatModModel:
type: MOD
props:
# 分库数量
sharding-count: 2
# d_seat表分表算法
tableSeatModModel:
type: MOD
props:
# 分表数量
sharding-count: 2
# d_ticket_category表分库算法
databaseTicketCategoryModModel:
type: MOD
props:
# 分库数量
sharding-count: 2
# d_ticket_category表分表算法
tableTicketCategoryModModel:
type: MOD
props:
# 分表数量
sharding-count: 2
props:
# 打印真实sql
sql-show: true
总结
- d_program表的分库分表都是用的id作为分片键,算法为MOD,取模
- d_program_group表的分库分表都是用的id作为分片键,算法为MOD,取模
- d_program_show_time表的分库分表都是用的program_id作为分片键,算法为MOD,取模
- d_seat表的分库分表都是用的program_id作为分片键,算法为MOD,取模
- d_ticket_category表的分库分表都是用的program_id作为分片键,算法为MOD,取模
- d_program_category为广播表
节目服务的分库分表配置比较常规,基本都是用program_id作为分片键,d_program_category表存储的是节目种类数据,数据量并不是很大,也就几百条,并且每个节目数据都需要此表关联,所以d_program_category比较适合作为广播表
企业级项目导航:⬅️ 02-分库分表-用户服务-购票人表 | 03-分库分表-节目服务 | ➡️ 04-分库分表-订单服务
💬 评论