使用sharding-jdbc实现水平分库+水平分表的示例代码
作者:穿条秋裤到处跑 发布时间:2023-11-05 03:21:50
标签:sharding-jdbc,水平分库,水平分表
前面的文章使用sharding-jdbc实现水平分表中详细记录了如何使用sharding-jdbc实现水平分表,即根据相应的策略,将一部分数据存入到表1中,一部分数据存入到表2中,逻辑上为同一张表,分表操作全部交由sharding-jdbc进行处理。
可能根据需要,还需要将一张表的数据拆分存入到多个数据库中,甚至多个数据库的多个表中,使用sharding-jdbc同样可以实现。
重复的篇幅则不再赘述,下面重点记录升级的过程。
分库分表策略:将id为偶数的存入到库1中,奇数存入到库2中,在每个库中,再根据学生的性别分别存到到表1和表2中。
新建两个数据库sharding_db1和sharding_db2,在两个数据库中在分别创建结构相同的两张表,student_1和student_2。
CREATE TABLE `NewTable` (
`ID` bigint(20) NOT NULL ,
`NAME` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL ,
`AGE` int(11) NOT NULL ,
`GENDER` int(1) NOT NULL ,
PRIMARY KEY (`ID`)
);
相比前面文章中,将gender性别字段设置成了int类型,方便根据性别再进行分表。
修改配置文件
spring.main.allow-bean-definition-overriding=true
# 配置Sharding-JDBC的分片策略
# 配置数据源,给数据源起名g1,g2...此处可配置多数据源
spring.shardingsphere.datasource.names=g1,g2
# 配置数据源具体内容:连接池,驱动,地址,用户名,密码
spring.shardingsphere.datasource.g1.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.g1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.g1.url=jdbc:mysql://localhost:3306/sharding_db1?characterEncoding=utf-8&useUnicode=true&useSSL=false&serverTimezone=UTC
spring.shardingsphere.datasource.g1.username=root
spring.shardingsphere.datasource.g1.password=123456
spring.shardingsphere.datasource.g2.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.g2.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.g2.url=jdbc:mysql://localhost:3306/sharding_db2?characterEncoding=utf-8&useUnicode=true&useSSL=false&serverTimezone=UTC
spring.shardingsphere.datasource.g2.username=root
spring.shardingsphere.datasource.g2.password=123456
# 配置数据库的分布,表的分布
spring.shardingsphere.sharding.tables.student.actual-data-nodes=g$->{1..2}.student_$->{1..2}
# 指定student表 主键gid 生成策略为 SNOWFLAKE
spring.shardingsphere.sharding.tables.student.key-generator.column=id
spring.shardingsphere.sharding.tables.student.key-generator.type=SNOWFLAKE
# 指定数据库分片策略 约定id值是偶数添加到sharding_db1中,奇数添加到sharding_db2中
spring.shardingsphere.sharding.tables.student.database-strategy.inline.sharding-column=id
spring.shardingsphere.sharding.tables.student.database-strategy.inline.algorithm-expression=g$->{id % 2 + 1}
# 指定表分片策略 约定gender值是0添加到student_1表,如果gender是1添加到student_2表
spring.shardingsphere.sharding.tables.student.table-strategy.inline.sharding-column=gender
spring.shardingsphere.sharding.tables.student.table-strategy.inline.algorithm-expression=student_$->{gender % 2 + 1}
# 打开sql输出日志
spring.shardingsphere.props.sql.show=true
配置多个数据源时,使用逗号隔开,分别配置其属性。除了配置表分片策略,还需配置库分配策略。
测试类
@SpringBootTest
class ShardingJdbcDemoApplicationTests {
@Autowired
private StudentMapper studentMapper;
@Test
public void test01() {
for (int i = 0; i < 15; i++) {
Student student = new Student();
student.setName("wuwl");
student.setAge(27);
student.setGender(i%2);
studentMapper.insert(student);
}
}
}
运行效果:
看样子是成功了,查看数据库数据。
sharding_db1.student_1:
sharding_db1.student_2:
sharding_db2.student_1:
sharding_db2.student_2:
来源:https://blog.csdn.net/qq_41885819/article/details/113847646


猜你喜欢
- 只要是开发和手机通讯录有关的应用,总要学会获取联系人信息,每次都google很麻烦,怎么办?写一个工具类,获取到通讯录里所有的信息并分好类,
- 前言Windows 11下所有控件已经默认采用圆角,其效果更好、相对有着更好的优化,只是这是默认的行为,无法进一步自定义。圆角按钮实现【重写
- 工厂模式Spring中bean的创建,默认是框架利用反射new出来的bean实例。有时候也会有一些复杂的情况。假设有一个飞机,属性如下,现在
- 下面的题目都是楼主在android交流群大家面试时遇到的,如果大家有好的题目或者好的见解欢迎分享,楼主将长期维护此帖。某公司高级面试题(20
- 由于项目需要做一些图形展示,所以就想到了使用Directx和OpenGL来绘图,但项目准备使用C#来开发(大家比较熟悉C#),在网上看了相关
- 什么是JMX?什么是JMX,Java Management Extensions,即Java管理扩展,是一个为应用程序、设备、系统等植入管理
- 1. 概述官方JavaDocsApi: javax.swing.JComboBoxJComboBox,下拉列表框。JComboBox以下列列
- 实践过程效果代码public partial class Form1 : Form{ public Form1()
- Java for循环标签跳转到指定位置大家是否见过这种for循环,在for循环前加了个标记的:outerLoop:for (; ; ) {
- 众所周知,java提供了很多字符串截取的方式。下面就来看看大致有几种。1.split()+正则表达式来进行截取。 将正则传入split()。
- 本文实例为大家分享了java开发利用jacob将word转pdf的具体代码,供大家参考,具体内容如下jacob 缺点:需要 window 环
- 原项目基于mybatis开发,新功能基于mybatis-plus开发,同时依赖如下两个jar包mybatis-spring-boot-sta
- 系统自带的VideoView有些视频格式不支持,那么我们可以用第三方实现的VideoView替代系统的来播放视频,比较流行的有ijkplay
- 1.动态绑定机制java的动态绑定机制非常重要实例A我们来看一个实例:阅读上面的代码,请说明下面的程序将输出什么结果:程序将会输出40和30
- 本文实例讲述了C#图像边缘检测(Roberts)的方法。分享给大家供大家参考。具体如下://定义roberts算子函数private sta
- 类加载器java中的类并不是一次加载完成的,而是按需加载。类加载器是用于加载java类到java虚拟机中的组件,它负责读取java字节码,并
- 1.汉诺塔介绍汉诺塔规则1.有三根杆子A,B,C。A杆上有若干碟子2.每次移动一块碟子,小的只能叠在大的上面3.把所有碟子从A杆全部移到C杆
- 一、常用操作NextDouble():返回0-1.0之间的随机数Next():返回非负随机整数(0-216)Next(i):返回一个小于i的
- 本文实例讲述了.net文件上传时实现通过文件头确认文件类型的方法,其中 script 用来返回给页面的数据,读者还可以根据自身需要对相关部分
- lambda表达式以及并行流。官方承诺你写出来的代码更运行得更快。流会自动通过Fork/Join池并行地执行。我听过一些关于Java 8的主