一、什么是广播表
指所有的分片数据源中都存在的表,表结构及其数据在每个数据库中均完全一致。 适用于数据量不大且需要与海量数据的表进行关联查询的场景,例如:字典表。
广播具有以下特性:
(1)插入、更新操作会实时在所有节点上执行,保持各个分片的数据一致性
(2)查询操作,只从一个节点获取
(3)可以跟任何一个表进行 JOIN 操作
二、创建广播表
在server-order0、service-order1和server-user服务器中分别创建t_dict表
CREATE TABLE t_dict(
id BIGINT,
order_type VARCHAR(200),
PRIMARY KEY(id)
);
三、程序实现
1. 创建实体类
@TableName("t_dict")
@Data
public class Dict {
//可以使用MyBatisPlus的雪花算法
@TableId(type = IdType.ASSIGN_ID)
private Long id;
private String orderType;
}
2. 创建Mapper
@Mapperpublic interface DictMapper extends BaseMapper<Dict> {}
3. 配置广播表
# 广播表
spring.shardingsphere.rules.sharding.broadcast-tables[0]=t_dict
四、测试广播表
@Autowired
private DictMapper dictMapper;
/**
* 广播表:每个服务器中的t_dict同时添加了新数据
*/
@Test
public void testBroadcast(){
Dict dict = new Dict();
dict.setOrderType("type1");
dictMapper.insert(dict);
}