ShardingJDBC 08_广播表

426 阅读1分钟

1 ShardingJDBC中的广播表

广播表,也可以称为全局表或静态表,存储的多为静态的、基本不会发生变化的数据,如世界时区、国家和地区、行政区划等等。

与在MyCat中相同,为减少不同库之间的查询量,广播表一般不需要进行分片,在所有数据库节点都保存一份完整的数据。

2 广播表的使用实践

2.1 创建数据表

在所有数据库分片中,创建表 province。

CREATE TABLE province (

id VARCHAR(50) NOT NULL DEFAULT 'AUTO_INCREMENT' COLLATE 'utf8mb4_bin',

name VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_bin'

);

image.png

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 验证

运行测试程序后,观察控制台

image.png

同时向ds0和ds1插入了相同的数据。

数据库分片ds0中的数据

image.png

数据库分片ds1中的数据

image.png