前言

在我们平时的项目中,经常会有一些数据量不是特别大但是在许多地方都会用到的表,比如字典表,如果单独把这些表放在一台服务器上的话查询的话会特别麻烦,经常需要跨库操作,效率不高。

如何解决这种问题?

我们可以把字典表在每台服务器上都对应存储一份,每台服务器上的数据保持一致,更新的时候同时更新。这种表就是我们下面要操作的广播表。

准备数据

在lagou1和lagou2库中分别新建city表,作为广播表:

1
2
3
4
5
6
CREATE TABLE `city` (
`Id` bigint(11) NOT NULL AUTO_INCREMENT,
`name` varchar(256) DEFAULT NULL,
`province` varchar(256) DEFAULT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

配置广播表

分别创建对应的JPA实体类及DAO接口(此处省略代码,详细参见文末源码)。

在application.properties中配置city表为广播表及对应的主键生成策略:

1
2
3
4
5
#broadcast
spring.shardingsphere.sharding.broadcast-tables=city
spring.shardingsphere.sharding.tables.city.key-generator.column=id
#主键生成策略为雪花算法
spring.shardingsphere.sharding.tables.city.key-generator.type=SNOWFLAKE

测试

查看数据库中city表:

可以看到我们的广播表在每台数据库中插入的数据主键都是一致的。

源码下载

shardingJdbc之广播表demo