Skip to content
On this page

分库分表中间件集成组件

1.引入依赖

xml
<dependency>
  <groupId>com.chinapost.mids</groupId>
  <artifactId>cpms-sharding-jdbc-spring-boot-starter</artifactId>
  <version>1.0.0-RELEASE</version>
</dependency>

2. 配置示例

此示例配置了两个数据库(demo0 和 demo1)和四个分表(t_order_0、t_order_1、t_order_item_0 和 t_order_item_1)。t_order 和 t_order_item 表在每个数据库中分成两张表。分库的依据是 order_id,分表的依据是 user_id。同时,主键生成策略是基于 Snowflake 算法

yaml
  shardingsphere:
    # 数据源配置
    datasource:
      names: demo0,demo1
      demo0:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        jdbc-url: jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Hongkong&allowMultiQueries=true
        username: root
        password: 123456
      demo1:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        jdbc-url: jdbc:mysql://127.0.0.1:3306/demo2?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Hongkong&allowMultiQueries=true
        username: root
        password: 123456
    # 设置规则
    rules:
      # 定义分片规则
      sharding:
        # 配置三种分片算法
        # database-inline、t-order-inline、t-order-item-inline 是三种 inline 类型的分片算法实例
        sharding-algorithms:
          database-inline:
            type: INLINE
            props:
              # 分片算法表达式
              algorithm-expression: demo$->{order_id % 2}
          t-order-inline:
            type: INLINE
            props:
              algorithm-expression: t_order_$->{user_id % 2}
          t-order-item-inline:
            type: INLINE
            props:
              algorithm-expression: t_order_item_$->{user_id % 2}
        # 配置分片表和相关的规则
        tables:
          # 定义了默认的主键生成策略
          default-key-generate-strategy:
            # 主键列名
            column: id
            # 主键生成器名称
            key-generator-name: snowflake
          # 主键生成器实例
          key-generators:
            snowflake:
              # 主键生成器类型
              type: SNOWFLAKE
              props:
                # 工作节点ID
                worker-id: 1
          # 配置 t_order 表的分片规则
          t_order:
            # 定义实际的数据节点
            actual-data-nodes: demo$->{0..1}.t_order_$->{0..1}
            # 定义分库策略
            database-strategy:
              standard:
                sharding-column: order_id
                sharding-algorithm-name: database-inline
                # 绑定的表,表示这些表可以被视为一个整体进行分片
                binding-tables[0]: t_order,t_order_item
            # 定义分表策略
            table-strategy:
              standard:
                sharding-column: user_id
                sharding-algorithm-name: t-order-inline
          t_order_item:
            actual-data-nodes: demo$->{0..1}.t_order_item_$->{0..1}
            database-strategy:
              standard:
                sharding-column: order_id
                sharding-algorithm-name: database-inline
                binding-tables[0]: t_order,t_order_item
            table-strategy:
              standard:
                sharding-column: user_id
                sharding-algorithm-name: t-order-item-inline