使用sharding-jdbc实现水平分库+水平分表的示例代码

作者:穿条秋裤到处跑 时间:2023-11-05 03:21:50 

前面的文章使用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-jdbc实现水平分库+水平分表的示例代码

看样子是成功了,查看数据库数据。

sharding_db1.student_1:

使用sharding-jdbc实现水平分库+水平分表的示例代码

sharding_db1.student_2:

使用sharding-jdbc实现水平分库+水平分表的示例代码

sharding_db2.student_1:

使用sharding-jdbc实现水平分库+水平分表的示例代码

sharding_db2.student_2:

使用sharding-jdbc实现水平分库+水平分表的示例代码

来源:https://blog.csdn.net/qq_41885819/article/details/113847646

标签:sharding-jdbc,水平分库,水平分表
0
投稿

猜你喜欢

  • java eclipse 中文件的上传和下载示例解析

    2021-11-18 06:55:58
  • 第1个Android应用程序 Android制作简单单页导航

    2022-09-27 22:23:26
  • C#基础 延迟加载介绍与实例

    2023-07-24 19:16:14
  • SpringBoot实现redis缓存菜单列表

    2023-11-24 07:39:20
  • WinForm实现自定义右下角提示效果的方法

    2023-01-19 08:19:57
  • 详解Java ScheduledThreadPoolExecutor的踩坑与解决方法

    2022-11-25 17:34:17
  • Java命令设计模式详解

    2022-07-14 04:38:31
  • c语言版本二叉树基本操作示例(先序 递归 非递归)

    2023-03-17 23:40:25
  • 如何利用JAVA实现走迷宫程序

    2022-06-23 10:52:06
  • java中List接口与实现类介绍

    2022-11-17 02:54:40
  • Android开发之关于项目

    2023-05-08 23:38:24
  • Android蓝牙的开启和搜索设备功能开发实例

    2022-11-07 20:42:17
  • Android编程之在SD卡上进行文件读写操作实例详解

    2022-04-15 10:29:50
  • Java 实现分布式服务的调用链跟踪

    2023-11-25 10:24:55
  • 1秒实现Springboot 图片添加水印功能

    2022-07-21 04:30:59
  • Android之软键盘自动弹出和关闭【代码分享】

    2021-06-30 16:26:08
  • JAVA实现账户取款和存款操作

    2023-08-22 16:31:45
  • Java解压zip文件的关键代码

    2023-05-11 18:28:34
  • C#编程中使用设计模式中的原型模式的实例讲解

    2023-07-18 07:47:10
  • java 线程的生命周期详解

    2023-05-28 08:32:25
  • asp之家 软件编程 m.aspxhome.com