Sharding-JDBC 原理和spring boot 核心配置文件说明

1、分库分表策略: 如每个数据记录属于一个集团ID、属于一个店铺ID列,可以根据集团ID%数据库数量取余设置规则分片键,及设置用哪个数据库和哪个表。 同现可以使用数据记录中的一列作为 分库、分表的分片键 如订单表中 order_id 等都可以。

用于分片的数据库字段。我们将 表分片以后,当执行一条SQL时,通过对字段 店铺ID、集团ID取模的方式来决定,这条数据该在哪个数据库中的哪个表中执行,此时 字段就是 表的分片健。

下面是具体的springboot使用 sharding -jdbc 配置文件,可以根据具体置文件进行理解。

mybatis-plus:
  mapper-locations: classpath:mapper/*.xml
  #实体扫描,多个package用逗号或者分号分隔
  #typeAliasesPackage: com.hualala.poshealth
  #字段策略
  global-config:
    db-config:
      insert-strategy: not_null
      update-strategy: not_null
      #逻辑删除
      logic-not-delete-value: 0
      logic-delete-value: 1
  #驼峰下划线转换
  configuration:
    map-underscore-to-camel-case: true
    #日志
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  logging:
    file:
      path: classpath:logback.xml
    levels: info

sharding:
  jdbc:
    datasource:
      names: soul0,soul1   # 数据库 分布信息
      soul0:
        jdbcUrl: jdbc:mysql://xxxxx.com:3306/db_pos_health_0?useUnicode=true&characterEncoding=utf8&autoReconnectForPools=true&socketTimeout=60000&useLocalSessionState=true
        username: abc
        password: 123
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        # 初始连接数
        initialSize: 5
        # 最小连接数
        minIdle: 5
        # 最大连接池数量
        maxActive: 100
        # 配置获取连接等待超时的时间
        maxWait: 60000
        # 用来检测连接是否有效的sql
        validationQuery: SELECT 1 FROM DUAL
        # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
        timeBetweenEvictionRunsMillis: 60000
        # 配置一个连接在池中最小生存的时间,单位是毫秒
        minEvictableIdleTimeMillis: 300000
      soul1:
        jdbcUrl: jdbc:mysql://xxx.com:3306/db_pos_health_1?useUnicode=true&characterEncoding=utf8&autoReconnectForPools=true&socketTimeout=60000&useLocalSessionState=true
        username: abc
        password: 123
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        # 初始连接数
        initialSize: 5
        # 最小连接数
        minIdle: 5
        # 最大连接池数量
        maxActive: 100
        # 配置获取连接等待超时的时间
        maxWait: 60000
        # 用来检测连接是否有效的sql
        validationQuery: SELECT 1 FROM DUAL
        # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
        timeBetweenEvictionRunsMillis: 60000
        # 配置一个连接在池中最小生存的时间,单位是毫秒
        minEvictableIdleTimeMillis: 300000
    config:
      sharding:
        tables:
          tbl_client_report_base: # 客户端信息,无需分库分表
            actual-nodes: soul0.tbl_client_report_base  # 指定主库中唯一的表节点
            database-strategy:
              none: # 分片策略为none
                sharding-column: none  # 分片键为none
            table-strategy:
              none: # 分片策略为none
                sharding-column: none # 分片键为none
            #keyGeneratorColumnName: base_id
          tbl_login_info: # 登录信息,无需分库分表
            actual-nodes: soul0.tbl_login_info  # 指定主库中唯一的表节点
            database-strategy:
              none: # 分片策略为none
                sharding-column: none  # 分片键为none
            table-strategy:
              none: # 分片策略为none
                sharding-column: none # 分片键为none
            #keyGeneratorColumnName: base_id
          tbl_collection_client: # 用户收藏,无需分库分表
            actual-nodes: soul0.tbl_collection_client  # 指定主库中唯一的表节点
            database-strategy:
              none: # 分片策略为none
                sharding-column: none  # 分片键为none
            table-strategy:
              none: # 分片策略为none
                sharding-column: none # 分片键为none
          tbl_client_control_msg: #远程控制信息
            actual-data-nodes: soul${0..1}.tbl_client_control_msg${0..1}
            table-strategy:
              inline:
                sharding-column: group_id
                algorithm-expression: tbl_client_control_msg${group_id % 2}
            database-strategy: #分库策略
              inline: #行表达式
                sharding-column: shop_id        #列名称,多个列以逗号分隔
                algorithm-expression: soul${shop_id % 2}    #按模运算分配
          tbl_operate_log: #操作记录
            actual-data-nodes: soul${0..1}.tbl_operate_log${0..4}
            table-strategy:
              inline:
                sharding-column: group_id
                algorithm-expression: tbl_operate_log${group_id % 5}
            database-strategy: #分库策略
              inline: #行表达式
                sharding-column: shop_id        #列名称,多个列以逗号分隔
                algorithm-expression: soul${shop_id % 2}    #按模运算分配

        default-database-strategy:
          inline:
            sharding-column: shop_id
            algorithm-expression: soul${shop_id % 2}
        binding-tables: tbl_client_report_base,tbl_client_control_msg,tbl_login_info,tbl_collection_client,tbl_operate_log
        broadcastTables: tbl_client_report_base,tbl_collection_client,tbl_login_info  # 广播表
        default-data-source-name: soul0 # 库分片策略为none时一定要设置默认数据源,否则应用无法启动

如有问题可以一起沟通讨论。

posted @ 2022-11-30 16:10  xiaoBai1001  阅读(303)  评论(0编辑  收藏  举报