0%

ShardingSphere-JDBC水平分库分表

ShardingSphere-JDBC水平分库分表

ShardingSphere-JDBC水平分库分表非常简单,只需要添加ShardingSphere-JDBC依赖并进行配置即可

1
2
3
4
5
6
<!-- sharding-jdbc 分库分表 -->
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>4.1.0</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
30
31
32
33
34
35
36
spring:
application:
name: sharding-jdbc-test
shardingsphere:
datasource:
names: ds0,ds1 # 配置数据源,给数据源起名
ds0: # 配置数据源具体内容,连接池、驱动、地址、用户名、密码
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis?useSSL=false
username: root
password: 123456
ds1: # 配置数据源具体内容,连接池、驱动、地址、用户名、密码
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis1?useSSL=false
username: root
password: 123456
sharding:
tables:
classes: # 这个classes是表名
database-strategy: #数据库策略
inline:
sahrding-column: db # 分库的列名
algorithm-expression: ds$->{id % 2} #分库的策略
actual-data-nodes: ds$->{0..1}.classes_$->{0..1} #设置classes表的分布,表在哪个数据库中 ds0是上面配置的数据源名称 classes_$->{0..1}表示的是表名称的表达式
key-generator: #主键生成策略
column: id # 主键
type: SNOWFLAKE # 主键的生成策略,雪花算法
table-strategy:
inline:
sharding-column: id #分片的列名
algorithm-expression: classes_$->{id % 2} #分片的策略
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
23
24
25
26
spring:
application:
name: sharding-jdbc-test
shardingsphere:
datasource:
names: ds0 # 配置数据源,给数据源起名
ds0: # 配置数据源具体内容,连接池、驱动、地址、用户名、密码
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis?useSSL=false
username: root
password: 123456
sharding:
tables:
classes: # 这个classes是表名
actual-data-nodes: ds0.classes_$->{0..1} #设置classes表的分布,表在哪个数据库中 ds0是上面配置的数据源名称 classes_$->{0..1}表示的是表名称的表达式
key-generator: #主键生成策略
column: id # 主键
type: SNOWFLAKE # 主键的生成策略,雪花算法
table-strategy:
inline:
sharding-column: id #分片的列名
algorithm-expression: classes_$->{id % 2} #分片的策略
props:
sql:
show: true # 输出日志