--- title: "03-分库分表-节目服务" created: 2025-12-10 aliases: - 分库分表-节目服务 tags: - 项目 --- # 分库分表-节目服务 阅读此文前,建议小伙伴先阅读分库分表的前置知识,对分库分表 和 shardingsphere 有了大概的理解后,在继续阅读本文 介绍 在开始介绍前,需要先知道大麦网中数据库表的关系是怎么样,关于数据库表设计的详细介绍,小伙伴可跳转到相关文档 配置 引入 ShardingSphere 的相关依赖 ```xml 5.3.2 org.apache.shardingsphere shardingsphere-jdbc-core ${shardingsphere.version} logback-classic ch.qos.logback ``` 根据规则进行分库分表的规则配置 节目项目相关配置: ```yaml spring: datasource: driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver url: jdbc:shardingsphere:classpath:shardingsphere-program.yaml ``` shardingsphere-program.yaml配置: ```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-分库分表-用户服务-购票人表|02-分库分表-用户服务-购票人表]] | 03-分库分表-节目服务 | ➡️ [[04-分库分表-订单服务|04-分库分表-订单服务]]