spring boot 集成 shardingsphere
环境
引入依赖
<properties>
<java.version>1.8</java.version>
<sharding-sphere.version>4.1.1</sharding-sphere.version>
</properties>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>${sharding-sphere.version}</version>
</dependency>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-namespace</artifactId>
<version>${sharding-sphere.version}</version>
</dependency>
准备2个数据库实例:ds0,ds1
示例
普通表分库
在数据库ds0和ds1中分别创建一张表(tab_order)
CREATE TABLE `tab_order` ( `order_id` bigint NOT NULL, `order_type` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL, PRIMARY KEY (`order_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
在yml文件中进行shardingsphere的配置
在测试代码中往tab_order表插入50条数据,会发现主键值为偶数的在数据库ds0中,为奇数的在数据库ds1中,并且数据均匀分布在两个库的tab_order中。
关联表分库
在数据库ds0和ds1中分别创建tab_order的子表tab_order_item
CREATE TABLE `tab_order_item` ( `item_id` bigint NOT NULL, `order_id` bigint DEFAULT NULL, `product_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, PRIMARY KEY (`item_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
在yml中进行shardingsphere的配置
往子表中插入数据,会发现子表是根据主表的主键是否奇偶来进行分片的。
分库且分表
在数据库ds0和ds1中分别创建tabmetadata0、tabmetadata1、tabmetadata2三张数据结构相同的表,例
CREATE TABLE `tabmetadata0` ( `mid` bigint NOT NULL, `pubtile` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL, `source` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL, PRIMARY KEY (`mid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
在yml中进行shardingsphere的配置
往表中注入数据,会发现所有主键为偶数的会在ds0数据库中,并且相对均匀分布在ds0中的tabmetadata0、tabmetadata1、tabmetadata2三张表中,所有主键为奇数的会在ds1中,也相对均匀的分布在ds1中的tabmetadata0、tabmetadata1、tabmetadata2三张表中
广播表
注释:指所有的分片数据源中都存在的表,表结构和表中的数据在每个数据库中均完全一致。适用于数据量不大且需要与海量数据的表进行关联查询的场景,例如:字典表在数据ds0和ds1中分别创建表tab_broadcast
CREATE TABLE `tab_broadcast` ( `broad_id` bigint NOT NULL AUTO_INCREMENT, `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, PRIMARY KEY (`broad_id`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
在yml中进行shardingsphere的配置
往tab_broadcast表中注入数据,结果ds0与ds1数据库中的tab_broadcast数据是相同的。
标准策略分库
注释:以上示例均采用行表达式(inline)的策略进行分库或分表,下面采用standard策略进行分库在数据ds0和ds1中分别创建表tab_metadata_standard
CREATE TABLE `tab_metadata_standard` ( `mid` bigint NOT NULL, `pubtile` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `source` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL, PRIMARY KEY (`mid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
在yml中进行shardingsphere的配置
创建类PreciseShardingDBAlgorithm 并实现接口PreciseShardingAlgorithm,重写doSharding方法,此方法自定义分库的规则,最终返回一个数据库源,例:
往tab_metadata_standard表中注入数据,会均匀的将数据在布在ds0和ds1数据库中。
最后编辑: 呼丽华 文档更新时间: 2024-08-21 10:58 作者:鲁航