sharding

数据库太大,需要将它分表操作,google后决定使用sharding-jdbc

1
2
3
4
5
6
7
8
9
10
11
12
<!-- sharding-jdbc -->
<dependency>
<groupId>io.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>3.1.0</version>
</dependency>
<!-- druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.9</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
sharding:
jdbc:
datasource:
# 因为只是分表,而不是分库,所以这里数据库就一个,给数据库一个别称
names: m1
m1:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/sharding?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC
username: XXXX
password: XXXX
config:
sharding:
tables:
# 这里是数据库的
test:
# 分成test_1,test_2,test_3 共3张表
actual-data-nodes: m1.test_$->{1..3}
table-strategy:
inline:
# 分片的字段,根据哪个字段来决定最终分配到哪个数据库
sharding-column: id
# 分片的规则,这里是id字段对3取余再加1,确保每次得到的结果都是1至3中的一个
algorithm-expression: test_$->{id % 3 + 1}
num:
# 分成num_1,num_2.num_3 共3张表
actual-data-nodes: m1.num_$->{1..3}
table-strategy:
inline:
sharding-column: id
algorithm-expression: num_$->{id % 3 + 1}
mybatis:
mapper-locations: classpath:mapper/*.xml

在mapper中需要用test,而不是某一个具体的,比如test_1,test_2

1
2
3
4
5
6
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from test
where id = #{id,jdbcType=INTEGER}
</select>

注意

因为上面的分片规则是根据Id取余,所以id只能为数字类型(integer、long等,不能为String),否则会报空指针异常

赏个🍗吧
0%