1 ShardingJDBC中的广播表
广播表,也可以称为全局表或静态表,存储的多为静态的、基本不会发生变化的数据,如世界时区、国家和地区、行政区划等等。
与在MyCat中相同,为减少不同库之间的查询量,广播表一般不需要进行分片,在所有数据库节点都保存一份完整的数据。
2 广播表的使用实践
2.1 创建数据表
在所有数据库分片中,创建表 province。
CREATE TABLE
province(
idVARCHAR(50) NOT NULL DEFAULT 'AUTO_INCREMENT' COLLATE 'utf8mb4_bin',
nameVARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_bin');
2.2 创建实体类
package com.myjdbc.entity;
import lombok.Data;
import javax.persistence.*;
import java.io.Serializable;
@Data
@Entity
@Table(name = "province")
public class Province implements Serializable {
@Id
@Column(name = "id", nullable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private String id;
@Column(name = "name")
private String name;
}
2.3 创建接口
package com.myjdbc.repository;
import com.myjdbc.entity.Province;
import org.springframework.data.jpa.repository.JpaRepository;
public interface ProvinceRepository extends JpaRepository<Province, Integer> {
}
2.4 添加配置信息
在配置文件中添加广播表及该表的主键、主键生成算法
spring.shardingsphere.sharding.broadcast-tables=province
spring.shardingsphere.sharding.tables.province.key-generator.column=id
spring.shardingsphere.sharding.tables.province.key-generator.type=SNOWFLAKE
2.5 创建测试类
@Resource
private ProvinceRepository provinceRepository;
@Test
public void testBroadcastTable(){
Province province = new Province();
province.setName("广东");
provinceRepository.save(province);
}
2.6 验证
运行测试程序后,观察控制台
同时向ds0和ds1插入了相同的数据。
数据库分片ds0中的数据
数据库分片ds1中的数据