当前位置: 首页 > news >正文

2. Sharding-JDBC广播表和绑定表操作

1. 广播表实战

⼴播表概念
1. 指所有的分⽚数据源中都存在的表,表结构和表中的数据在每个数据库中均完全⼀致。
2. 适⽤于数据量不⼤且需要与海量数据的表进⾏关联查询的场景。
3. 例如:字典表、配置表。
注意
1. 分库分表中间件,对应的数据库字段,不能是sql的关键字
在2个库中分别进行表创建
CREATE TABLE `ad_config` (`id` bigint unsigned NOT NULL COMMENT '主键id',`config_key` varchar(1024) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '配置key',`config_value` varchar(1024) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '配置value',`type` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '类型',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_bin;
实体类
package com.dss.sharding.model;import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;@Data
@EqualsAndHashCode(callSuper = false)
@TableName("ad_config")
public class AdConfigDO {private Long id;private String configKey;private String configValue;private String type;}
package com.dss.sharding.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dss.sharding.model.AdConfigDO;public interface AdConfigMapper extends BaseMapper<AdConfigDO> {
}
新增配置项
#配置广播表
spring.shardingsphere.sharding.broadcast-tables=ad_config
spring.shardingsphere.sharding.tables.ad_config.key-generator.column=id
spring.shardingsphere.sharding.tables.ad_config.key-generator.type=SNOWFLAKE
测试
@Autowired
private AdConfigMapper adConfigMapper;@Testpublic void testSaveAdConfig(){AdConfigDO adConfigDO = new AdConfigDO();adConfigDO.setConfigKey("banner");adConfigDO.setConfigValue("csdn.net");adConfigDO.setType("adss");adConfigMapper.insert(adConfigDO);}

在这里插入图片描述
在这里插入图片描述

结论

广播表中的数据是完全一模一样的

2 ⽔平分库+⽔平分表配置

库表结构
1. 2个数据库、每个库2张表
需求
1. 插⼊订单数据,分布在不同的库和表上
操作
1. 参考第一章,建立两个库,两个库中各有2张订单表
分库分表配置
1. 分库规则 根据 user_id 进⾏分库
2. 分表规则 根据 product_order_id 订单号进⾏分表
完整的配置文件

spring.application.name=dss-sharding-jdbc
server.port=8080# 打印执行的数据库以及语句
spring.shardingsphere.props.sql.show=true# 数据源 db0
spring.shardingsphere.datasource.names=ds0,ds1# 第一个数据库
spring.shardingsphere.datasource.ds0.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.ds0.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds0.jdbc-url=jdbc:mysql://127.0.0.1:3306/xdclass_shop_order_0?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
spring.shardingsphere.datasource.ds0.username=root
spring.shardingsphere.datasource.ds0.password=root# 第二个数据库
spring.shardingsphere.datasource.ds1.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.ds1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds1.jdbc-url=jdbc:mysql://127.0.0.1:3306/xdclass_shop_order_1?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
spring.shardingsphere.datasource.ds1.username=root
spring.shardingsphere.datasource.ds1.password=root#配置workId
spring.shardingsphere.sharding.tables.product_order.key-generator.props.worker.id=1#配置广播表
spring.shardingsphere.sharding.broadcast-tables=ad_config
spring.shardingsphere.sharding.tables.ad_config.key-generator.column=id
spring.shardingsphere.sharding.tables.ad_config.key-generator.type=SNOWFLAKE#配置分库规则
spring.shardingsphere.sharding.tables.product_order.database-strategy.inline.sharding-column=user_id
spring.shardingsphere.sharding.tables.product_order.database-strategy.inline.algorithm-expression=ds$->{user_id % 2 }#id生成策略
spring.shardingsphere.sharding.tables.product_order.key-generator.column=id
spring.shardingsphere.sharding.tables.product_order.key-generator.type=SNOWFLAKE# 指定product_order表的数据分布情况,配置数据节点,行表达式标识符使用 ${...} 或 $->{...},
# 但前者与 Spring 本身的文件占位符冲突,所以在 Spring 环境中建议使用 $->{...}
#spring.shardingsphere.sharding.tables.product_order.actual-data-nodes=ds0.product_order_$->{0..1}
spring.shardingsphere.sharding.tables.product_order.actual-data-nodes=ds$->{0..1}.product_order_$->{0..1}# 指定product_order表的分片策略,分片策略包括【分片键和分片算法】
spring.shardingsphere.sharding.tables.product_order.table-strategy.inline.sharding-column=id
spring.shardingsphere.sharding.tables.product_order.table-strategy.inline.algorithm-expression=product_order_$->{id % 2}

测试类

@Testpublic void testSaveProductOrder2(){Random random = new Random();for(int i=0; i<20;i++){ProductOrderDO productOrderDO = new ProductOrderDO();productOrderDO.setCreateTime(new Date());productOrderDO.setNickname("dss_i="+i);productOrderDO.setOutTradeNo(UUID.randomUUID().toString().substring(0,32));productOrderDO.setPayAmount(100.00);productOrderDO.setState("PAY");/*** userid需要实时生成*/productOrderDO.setUserId( Long.valueOf(random.nextInt(50)) );productOrderMapper.insert(productOrderDO);}}
测试效果
1. 共计20条数据,分别落在2各库中的2各表中。
2. 4张表的数据量分别是6,6,6,2条

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.绑定表介绍和配置实战


http://www.mrgr.cn/news/71017.html

相关文章:

  • FPV整机- 穿越机无人机系统 之系统、产品研发
  • 创客匠人老蒋:个人IP如何获取有效流量?
  • Python操作neo4j库py2neo使用之创建和查询(二)
  • 红外相机和RGB相机外参标定 - 无需标定板方案
  • Jina CLIP v2:多语言多模态的文本图像向量模型
  • 基于Spring AI alibaba组件AI问答功能开发示例
  • 阿里云Linux安装Docker服务报错问题
  • 【轻松远程处理图片:在线图片编辑工具Photopea群晖NAS部署解决方案】
  • 解决 C/C++ 中 “invalid use of incomplete type” 编译错误
  • 【前端】深入浅出的React.js详解
  • Spring Boot编程训练系统:深入设计与实现
  • 双指针算法的妙用:提高代码效率的秘密(3)
  • 【三宝的身高】
  • 数据湖系列之四 | 数据湖存储加速方案的发展和对比分析
  • C# 后端方法返回时间戳
  • 2025年河南定向选调生报名时间
  • java ssm 个人学习管理系统 学习安排 学生在线学习管理 源码 jsp
  • 【GDB调试】智慧中控项目的调试
  • 【Linux进程篇4】谈:操作系统进程调度各种基本状态(运行,挂起,阻塞等)
  • 第18篇 :深入剖析systemverilog中 randomize 静态static约束案例(四)
  • 中国人工智能影响力人物谌鹏飞行善公益演讲--《AI就是爱》
  • 如何选择适合自己需求的可编程晶振?
  • [定时器]
  • AI Agent智能数字员工解决案例
  • 关于第二台及其的 Anaconda的安装信息
  • 计算机组成原理之SISD,SIMD,MIMD,向量处理器的基本概念