SpringBoot+ShardingSphereJDBC实战(读写分离,分库分表,垂直拆分、水平拆分)附源码

参考:https://www.51cto.com/article/747736.html
https://blog.csdn.net/qq_41581588/article/details/126966665

源码地址:git@gitee.com:jackXUYY/springboot-example.git

读写分离测试

我们启用后缀名为dev的配置文件,如下,数据库链接需要改成自己的地址
库表需要自己建,在resources/sql下

在这里插入图片描述

配置如下

# 读写分离配置,使用前先搭建mysql主从数据库,对应UserController
spring:
  shardingsphere:
    datasource:
      # 配置真实数据源
      names: master,slave1,slave2
      # 配置第 1 个数据源,为了方便,我们搞3个库,但里面的表一样,当做主从配置
      master:
        driver-class-name: com.mysql.jdbc.Driver
        jdbc-url: jdbc:mysql://127.0.0.1:3306/db_user
        password: root
        type: com.zaxxer.hikari.HikariDataSource
        username: root
      # 配置第 2 个数据源
      slave1:
        driver-class-name: com.mysql.jdbc.Driver
        jdbc-url: jdbc:mysql://127.0.0.1:3306/db_user1
        password: root
        type: com.zaxxer.hikari.HikariDataSource
        username: root
      # 配置第 3 个数据源
      slave2:
        driver-class-name: com.mysql.jdbc.Driver
        jdbc-url: jdbc:mysql://127.0.0.1:3306/db_user2
        password: root
        type: com.zaxxer.hikari.HikariDataSource
        username: root
    mode:
      # 内存模式 内存模式,初始化配置或执行SQL等操作均在当前进程生效
      # Standalone 单机模式,可以将数据源和规则等元数据信息持久化,但是这些元数据不会在集群中同步
      # Cluster 集群模式,提供了多个Apache ShardingSphere实例之间元数据共享以及分布式场景下的状态协调的能力,也提供水平扩展以及高可用的能力
      # 可参考 https://blog.csdn.net/qq_41581588/article/details/126966665
      type: Memory
    # 打印sql
    props:
      sql-show: true
    rules:
      # 读写分离规则
      readwrite-splitting:
        # 数据源配置
        data-sources:
          # 这个名字随便起
          myds:
            # 读写分离类型,如: Static,Dynamic
            type: Static
            # 读数据源负载均衡算法名称
            load-balancer-name: alg_random
            props:
              # 读数据源名称,多个从数据源用逗号分隔
              read-data-source-names: slave1,slave2
              # 写数据源名称
              write-data-source-name: master
        # 负载均衡配置
        load-balancers:
          # 定义负载均衡算法:随机,轮询,权重
          alg_random:
            type: RANDOM
          alg_round:
            type: ROUND_ROBIN
          alg_weight:
            props:
              slave1: 1
              slave2: 2
            type: WEIGHT

启动服务,执行这两个接口看控制台打印结果

在这里插入图片描述

垂直分片 测试 (从不同的库中加载多张不同的表在一个项目中使用)

打开dev2的配置,执行OrderController里面的接口看控制台打印的效果

注意数据库链接改成自己的,库表需要先建好,

在这里插入图片描述
水平分表测试(将表拆成多个结构一样,每个表存一点数据)使用dev3的配置
建个t_order1的表,和t_order结构一样

在这里插入图片描述
在这里插入图片描述

水平分片:查询所有记录,

查询了两个数据源,每个数据源中使用UNION ALL连接两个表
     * Actual SQL: server-order0 ::: SELECT  id,order_no,user_id,amount  FROM t_order0 UNION ALL SELECT  id,order_no,user_id,amount  FROM t_order1
     * Actual SQL: server-order1 ::: SELECT  id,order_no,user_id,amount  FROM t_order0 UNION ALL SELECT  id,order_no,user_id,amount  FROM t_order1

在这里插入图片描述

关联表测试,使用dev4的配置

广播表测试 使用dev5的配置

相关推荐

  1. 深度解析数据库垂直水平:原则详解

    2023-12-28 21:20:05       40 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-28 21:20:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-28 21:20:05       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-28 21:20:05       82 阅读
  4. Python语言-面向对象

    2023-12-28 21:20:05       91 阅读

热门阅读

  1. 三路归并排序可视化

    2023-12-28 21:20:05       55 阅读
  2. 算法训练营Day29(回溯)

    2023-12-28 21:20:05       61 阅读
  3. 阿里控股 面经

    2023-12-28 21:20:05       60 阅读
  4. 快速排序回顾及相关题型

    2023-12-28 21:20:05       60 阅读
  5. 72 DFS解决目标和问题

    2023-12-28 21:20:05       51 阅读
  6. 进程

    进程

    2023-12-28 21:20:05      50 阅读
  7. nginx部署前端项目总结

    2023-12-28 21:20:05       67 阅读
  8. C++_静态成员变量介绍

    2023-12-28 21:20:05       51 阅读
  9. MOS和三极管

    2023-12-28 21:20:05       56 阅读
  10. Go语言并发编程:Goroutines和Channels的详细指南

    2023-12-28 21:20:05       66 阅读
  11. 应对微信小程序用户流失率的有效策略

    2023-12-28 21:20:05       55 阅读
  12. js 事件处理(addEventListener() 、removeEventListener())

    2023-12-28 21:20:05       55 阅读
  13. 浅谈Linux的OOM Killer机制

    2023-12-28 21:20:05       57 阅读