Appearance
分库分表中间件集成组件
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