栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springboot+mysql+sharding分库分表初尝试

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springboot+mysql+sharding分库分表初尝试

随着数据库的读写压力增大及数据量的增加,出现了数据库中间件进行分库分表的场景,现对sharding数据库中间件进行分库分表的实现进行尝试。
分库?单个数据库》多个数据库
分表?单个表》多个表
数据的切分(Sharding)分为水平分库(将数据按某种条件分开存储)和垂直分库(将数据按不同表分开存储)。
maven核心依赖


            org.springframework.boot
            spring-boot-starter-web
        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            2.2.0
        

        
            mysql
            mysql-connector-java
            runtime
        
        
        
            org.apache.shardingsphere
            sharding-jdbc-spring-boot-starter
            4.1.1
        
        
        
            com.alibaba
            druid
            1.2.8
        

核心配置
分库场景

server:
  port: 9002
spring:
  application:
    # 分库
    name: sharding-db
  # 数据源名称,多数据源以逗号分隔
  shardingsphere:
    datasource:
      names: ds0,ds1
      # 数据源ds0
      ds0:
        type: com.alibaba.druid.pool.DruidDataSource
        url: jdbc:mysql://localhost:3306/write
        username: root
        password: 
        driver-class-name: com.mysql.cj.jdbc.Driver
      # 数据源ds1
      ds1:
        type: com.alibaba.druid.pool.DruidDataSource
        url: jdbc:mysql://localhost:3306/read1
        username: root
        password: 
        driver-class-name: com.mysql.cj.jdbc.Driver
    props:
      sql.show: true
    # 数据分表规则,指定所需分的表
    sharding:
      tables:
        student: # student表
          key-generator-column-name: id  # 主键
          database-strategy: #分库策略
            inline: #行表达式
              sharding-column: num        #列名称,多个列以逗号分隔
              algorithm-expression: ds$->{num % 2}    #按模运算分配

# mybatis,放在resource目录 classpath:/mapper/*.xml
mybatis:
  mapper-locations: classpath:mapper/*.xml

分表场景

server:
  port: 9002
spring:
  application:
    # 分表
    name: sharding-table
  # 数据源名称,多数据源以逗号分隔
  shardingsphere:
    datasource:
      names: ds0
      # 数据源ds0
      ds0:
        type: com.alibaba.druid.pool.DruidDataSource
        url: jdbc:mysql://localhost:3306/write
        username: root
        password: 
        driver-class-name: com.mysql.cj.jdbc.Driver
    props:
      sql.show: true
    # 数据分表规则,指定所需分的表
    sharding:
      tables:
        student: # student表
          key-generator-column-name: id  # 主键
          actual-data-nodes: ds0.student$->{0..1}    # 数据节点,均匀分布
          table-strategy: # 分表策略
            inline: # 行表达式
              shardingColumn: num  # num为学号字段
              algorithmexpression: student$->{num % 2}  # 按模运算分配

# mybatis,放在resource目录 classpath:/mapper/*.xml
mybatis:
  mapper-locations: classpath:mapper/*.xml

分库分表场景

server:
  port: 9002
spring:
  application:
    # 分库分表
    name: sharding-db-table
  # 数据源名称,多数据源以逗号分隔
  shardingsphere:
    datasource:
      names: ds0,ds1
      # 数据源ds0
      ds0:
        type: com.alibaba.druid.pool.DruidDataSource
        url: jdbc:mysql://localhost:3306/write
        username: root
        password: 
        driver-class-name: com.mysql.cj.jdbc.Driver
      # 数据源ds1
      ds1:
        type: com.alibaba.druid.pool.DruidDataSource
        url: jdbc:mysql://localhost:3306/read1
        username: root
        password: 
        driver-class-name: com.mysql.cj.jdbc.Driver
    props:
      sql.show: true
    # 数据分表规则,指定所需分的表
    sharding:
      tables:
        student: # student表
          key-generator-column-name: id  # 主键
          actual-data-nodes: ds$->{0..1}.student$->{0..1}    #数据节点,均匀分布
          database-strategy: #分库策略
            inline: #行表达式
              sharding-column: num        #列名称,多个列以逗号分隔
              algorithm-expression: ds$->{num % 2}    #按模运算分配
          table-strategy: # 分表策略
            inline: # 行表达式
              sharding-column: num  # no为学号字段
              algorithm-expression: student$->{num % 2}  # 按模运算分配

# mybatis,放在resource目录 classpath:/mapper/*.xml
mybatis:
  mapper-locations: classpath:mapper/*.xml

读写分离+分表

server:
  port: 9002
spring:
  application:
    # 读写分离+分表
    name: sharding-masterslave-table
  # 数据源名称,多数据源以逗号分隔
  shardingsphere:
    datasource:
      names: ds0,ds1
      # 数据源ds0
      ds0:
        type: com.alibaba.druid.pool.DruidDataSource
        url: jdbc:mysql://localhost:3306/write
        username: root
        password: 
        driver-class-name: com.mysql.cj.jdbc.Driver
      # 数据源ds1
      ds1:
        type: com.alibaba.druid.pool.DruidDataSource
        url: jdbc:mysql://localhost:3306/read1
        username: root
        password: 
        driver-class-name: com.mysql.cj.jdbc.Driver
    props:
      sql.show: true
    # 数据分表规则,指定所需分的表
    sharding:
      tables:
        student: # student表
          key-generator-column-name: id  # 主键
          actual-data-nodes: masterslave.student$->{0..1}    #数据节点,均匀分布
          table-strategy: # 分表策略
            inline: # 行表达式
              sharding-column: num  # no为学号字段
              algorithm-expression: student$->{num % 2}  # 按模运算分配
      master-slave-rules:
        masterslave:
          master-data-source-name: ds0
          slave-data-source-names: ds1

# mybatis,放在resource目录 classpath:/mapper/*.xml
mybatis:
  mapper-locations: classpath:mapper/*.xml

分库分表各种场景可自行验证,常规的业务操作即可。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/318218.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号