当前位置:   article > 正文

SpringBoot使用sharding分库分表、读写分离(主从)_springboot 分表、主从配置

springboot 分表、主从配置

数据库


在这里插入图片描述

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

依赖

主要依赖

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>根据实际选择</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>

		<!--使用sharding不能使用druid-spring-boot-starter-->
<!--        <dependency>-->
<!--            <groupId>com.alibaba</groupId>-->
<!--            <artifactId>druid-spring-boot-starter</artifactId>-->
<!--            <version>1.2.11</version>-->
<!--        </dependency>-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.11</version>
        </dependency>

        <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
            <version>4.1.1</version>
        </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

配置数据源

spring:
  shardingsphere:
    # 配置数据源,给数据源起名g1,g2...此处可配置多数据源
    datasource:
      names: g1, g2
      g1:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/goods_db
        username: root
        password: root
      g2:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/goods_db2
        username: root
        password: root

    # 打开sql输出日志
    props:
      sql:
        show: true
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

分库分表

分表:在实际使用中根据策略分配到同数据库的不同的表中
分库:在实际使用中根据策略分配到不同数据库的中

spring:
  shardingsphere:
    ### 分库分表
    # 配置表的分布
    sharding:
      tables:
        # 逻辑表名,sql中查询该表时实施策略,select * from g
        g:
          # 真实表名,由 数据源名.表名 组成
          # g$->{1..2}表示数据源从g1到g2
          # goods_$->{1..2}表示数据表从goods_1到goods_2
          actual-data-nodes: g$->{1..2}.goods_$->{1..2}
          key-generator:
            # 指定goods表主键gid 生成策略为 SNOWFLAKE
            column: gid
            type: SNOWFLAKE
          # 配置表策略
          table-strategy:
            inline:
              # 指定分表策略 约定gid值是偶数添加到goods_1表,如果gid奇数添加到tgoods_2表
              sharding-column: gid
              algorithm-expression: goods_$->{gid % 2 + 1}
          # 配置库策略
          database-strategy:
            inline:
              # 根据user_id分库,根据user_id判断奇偶数选择数据源
              sharding-column: user_id
              algorithm-expression: g$->{user_id % 2 + 1}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

使用

使用中除了mapper写法有点区别外,其他类、文件与正常使用一致

mapper

Mapper中主要是xml文件里sql写法不同
原 select * from goods_1 where gid = #{gid} and user_id = #{userId}
先需将表名改为g,即 select * from g where gid = #{gid} and user_id = #{userId}
sharding会自动根据gid和user_id的值进行分库分表

如上文所配时:
当user_id为2,偶数,则会选择g1数据源,即goods_db库
当gid为3,奇数,则会选择goods_2表
则最终会使用goods_db库的goods_2表

读写分离(主从)

有两种,一种是全局,另一种是可针对分表配置主从数据库

全局

使用全局主从也许不能使用分库分表,并且sql中表名不能使用分库分表中的写法
即上文中的 select * from g

spring:
  shardingsphere:
    masterslave:
      #主从数据源
      name: ds0
      # 主数据源
      master-data-source-name: g1
      # 从数据源
      slave-data-source-names: g2
      load-balance-algorithm-type: round_robin
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

针对分表配置

针对分表策略配置

spring:
  shardingsphere:
    ### 分库分表
    sharding:
      tables:
        g:
          # 真实表名,由于是主从策略,因此数据源使用主从数据源,在下文定义
          actual-data-nodes: ds0.goods_$->{1..2}
          key-generator:
            column: gid
            type: SNOWFLAKE
          table-strategy:
            inline:
              sharding-column: gid
              algorithm-expression: goods_$->{gid % 2 + 1}

      master-slave-rules:
        # 主从数据源
        ds0:
          # 主数据源
          master-data-source-name: g1
          # 从数据源
          slave-data-source-names:
            - g2
          load-balance-algorithm-type: ROUND_ROBIN
      # 默认数据源,防止未配置分表的真实表插入时走从表
      default-data-source-name: ds0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

使用

会自动根据查询还是插入选择不同的数据源
若使用全局,则和正常使用一致
若使用针对分表配置主从,则和分库分表使用一致,可使用分表策略

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/756983
推荐阅读
相关标签
  

闽ICP备14008679号