Skip to content

Commit d394af5

Browse files
author
hanjuntao
committed
Add ms, sms.
1 parent e1f0739 commit d394af5

File tree

6 files changed

+248
-3
lines changed

6 files changed

+248
-3
lines changed

README.md

Lines changed: 79 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,81 @@
1+
## Sharding-Sphere 数据分片与读写分离
2+
3+
### 数据分片
4+
5+
`t_order`逻辑表可以分为以下真实表:
6+
17
```
2-
java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev
8+
db0
9+
├── t_order_0
10+
├── t_order_1
11+
└── t_order_2
12+
db1
13+
├── t_order_0
14+
├── t_order_1
15+
└── t_order_2
16+
```
17+
18+
编译后执行, profile 为 `sharding`
19+
20+
```
21+
java -jar demo-0.0.1-SNAPSHOT.jar --spring.profiles.active=sharding
22+
```
23+
24+
### 读写分离
25+
26+
配置master为主库,slave0和slave1为从库:
27+
28+
```
29+
master
30+
└── t_user
31+
32+
slave0
33+
└── t_user
34+
35+
slave1
36+
└── t_user
37+
```
38+
39+
编译后执行, profile 为 `ms`
40+
41+
```
42+
java -jar demo-0.0.1-SNAPSHOT.jar --spring.profiles.active=ms
43+
```
44+
45+
### 数据分片 + 读写分离
46+
47+
结合数据分片和读写分离,将master分片为master0 和master1 两个数据库,然后再master0和master1配置主从数据库,
48+
master0 对应 master0slave0,master0slave1, master1对应 master1slave0,master1slave1
49+
50+
```
51+
master0
52+
├── t_order_0
53+
└── t_order_1
54+
55+
master0slave0
56+
├── t_order_0
57+
└── t_order_1
58+
59+
master0slave1
60+
├── t_order_0
61+
└── t_order_1
62+
63+
64+
master1
65+
├── t_order_0
66+
└── t_order_1
67+
68+
master1slave0
69+
├── t_order_0
70+
└── t_order_1
71+
72+
master1slave1
73+
├── t_order_0
74+
└── t_order_1
75+
```
76+
77+
编译后执行, profile 为 `sms`
78+
79+
```
80+
java -jar demo-0.0.1-SNAPSHOT.jar --spring.profiles.active=sms
381
```

src/main/resources/application-ms.properties

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
# 读写分离
2+
23
# 配置数据源
34
sharding.jdbc.datasource.names=master,slave0,slave1
45

6+
# 主库数据源配置
57
sharding.jdbc.datasource.master.type=com.zaxxer.hikari.HikariDataSource
68
sharding.jdbc.datasource.master.driver-class-name=com.mysql.jdbc.Driver
79
sharding.jdbc.datasource.master.jdbc-url=jdbc:mysql://localhost:3306/master
810
sharding.jdbc.datasource.master.username=root
911
sharding.jdbc.datasource.master.password=admin
1012

13+
# 从库数据源配置
1114
sharding.jdbc.datasource.slave0.type=com.zaxxer.hikari.HikariDataSource
1215
sharding.jdbc.datasource.slave0.driver-class-name=com.mysql.jdbc.Driver
1316
sharding.jdbc.datasource.slave0.jdbc-url=jdbc:mysql://localhost:3306/slave0
@@ -20,6 +23,7 @@ sharding.jdbc.datasource.slave1.jdbc-url=jdbc:mysql://localhost:3306/slave1
2023
sharding.jdbc.datasource.slave1.username=root
2124
sharding.jdbc.datasource.slave1.password=admin
2225

26+
# 配置主从信息
2327
sharding.jdbc.config.masterslave.load-balance-algorithm-type=round_robin
2428
sharding.jdbc.config.masterslave.name=ms
2529
sharding.jdbc.config.masterslave.master-data-source-name=master
Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,50 @@
1-
# ���ݷ�Ƭ+��д����
1+
# Êý¾Ý·ÖƬ+¶Áд·ÖÀë
2+
3+
sharding.jdbc.datasource.names=master0,master1,master0slave0,master0slave1,master1slave0,master1slave1
4+
5+
sharding.jdbc.datasource.master0.type=com.zaxxer.hikari.HikariDataSource
6+
sharding.jdbc.datasource.master0.driver-class-name=com.mysql.jdbc.Driver
7+
sharding.jdbc.datasource.master0.url=jdbc:mysql://localhost:3306/master0
8+
sharding.jdbc.datasource.master0.username=root
9+
sharding.jdbc.datasource.master0.password=admin
10+
11+
sharding.jdbc.datasource.master0slave0.type=com.zaxxer.hikari.HikariDataSource
12+
sharding.jdbc.datasource.master0slave0.driver-class-name=com.mysql.jdbc.Driver
13+
sharding.jdbc.datasource.master0slave0.url=jdbc:mysql://localhost:3306/master0slave0
14+
sharding.jdbc.datasource.master0slave0.username=root
15+
sharding.jdbc.datasource.master0slave0.password=
16+
sharding.jdbc.datasource.master0slave1.type=com.zaxxer.hikari.HikariDataSource
17+
sharding.jdbc.datasource.master0slave1.driver-class-name=com.mysql.jdbc.Driver
18+
sharding.jdbc.datasource.master0slave1.url=jdbc:mysql://localhost:3306/master0slave1
19+
sharding.jdbc.datasource.master0slave1.username=root
20+
sharding.jdbc.datasource.master0slave1.password=
21+
22+
sharding.jdbc.datasource.master1.type=com.zaxxer.hikari.HikariDataSource
23+
sharding.jdbc.datasource.master1.driver-class-name=com.mysql.jdbc.Driver
24+
sharding.jdbc.datasource.master1.url=jdbc:mysql://localhost:3306/master1
25+
sharding.jdbc.datasource.master1.username=root
26+
sharding.jdbc.datasource.master1.password=admin
27+
28+
sharding.jdbc.datasource.master1slave0.type=com.zaxxer.hikari.HikariDataSource
29+
sharding.jdbc.datasource.master1slave0.driver-class-name=com.mysql.jdbc.Driver
30+
sharding.jdbc.datasource.master1slave0.url=jdbc:mysql://localhost:3306/master1slave0
31+
sharding.jdbc.datasource.master1slave0.username=root
32+
sharding.jdbc.datasource.master1slave0.password=admin
33+
sharding.jdbc.datasource.master1slave1.type=com.zaxxer.hikari.HikariDataSource
34+
sharding.jdbc.datasource.master1slave1.driver-class-name=com.mysql.jdbc.Driver
35+
sharding.jdbc.datasource.master1slave1.url=jdbc:mysql://localhost:3306/master1slave1
36+
sharding.jdbc.datasource.master1slave1.username=root
37+
sharding.jdbc.datasource.master1slave1.password=admin
38+
39+
sharding.jdbc.config.sharding.default-database-strategy.inline.sharding-column=user_id
40+
sharding.jdbc.config.sharding.default-database-strategy.inline.algorithm-expression=master$->{user_id % 2}
41+
42+
sharding.jdbc.config.sharding.tables.t_order.actual-data-nodes=master$->{0..1}slave$->{0..1}.t_order_$->{0..1}
43+
sharding.jdbc.config.sharding.tables.t_order.table-strategy.inline.sharding-column=order_id
44+
sharding.jdbc.config.sharding.tables.t_order.table-strategy.inline.algorithm-expression=t_order$->{order_id % 2}
45+
sharding.jdbc.config.sharding.tables.t_order.key-generator-column-name=order_id
46+
47+
sharding.jdbc.config.sharding.master-slave-rules.ds0.master-data-source-name=master0
48+
sharding.jdbc.config.sharding.master-slave-rules.ds0.slave-data-source-names=master0slave0, master0slave1
49+
sharding.jdbc.config.sharding.master-slave-rules.ds1.master-data-source-name=master1
50+
sharding.jdbc.config.sharding.master-slave-rules.ds1.slave-data-source-names=master1slave0, master1slave1

src/main/resources/db/ms.sql

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
--- 创建master数据库
12
CREATE DATABASE IF NOT EXISTS `master`;
23
USE `master`;
34
CREATE TABLE IF NOT EXISTS `t_user` (
@@ -6,7 +7,7 @@ CREATE TABLE IF NOT EXISTS `t_user` (
67
PRIMARY KEY (`id`)
78
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
89

9-
10+
--- 创建slave0数据库
1011
CREATE DATABASE IF NOT EXISTS `slave0`;
1112
USE `slave0`;
1213
CREATE TABLE IF NOT EXISTS `t_user` (
@@ -15,6 +16,7 @@ CREATE TABLE IF NOT EXISTS `t_user` (
1516
PRIMARY KEY (`id`)
1617
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1718

19+
--- 创建slave1数据库
1820
CREATE DATABASE IF NOT EXISTS `slave1`;
1921
USE `slave1`;
2022
CREATE TABLE IF NOT EXISTS `t_user` (

src/main/resources/db/sharding.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
--- 创建默认数据库,不进行数据库分片
12
CREATE DATABASE IF NOT EXISTS `default_t`;
23
USE `default_t`;
34
CREATE TABLE IF NOT EXISTS `t_user` (

src/main/resources/db/sms.sql

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
-- 创建master0数据库
2+
CREATE DATABASE IF NOT EXISTS `master0`;
3+
USE `master0`;
4+
5+
CREATE TABLE IF NOT EXISTS `t_order_0` (
6+
`order_id` bigint(20) NOT NULL,
7+
`user_id` int(11) NOT NULL,
8+
`status` varchar(50) DEFAULT NULL,
9+
PRIMARY KEY (`order_id`)
10+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
11+
12+
CREATE TABLE IF NOT EXISTS `t_order_1` (
13+
`order_id` bigint(20) NOT NULL,
14+
`user_id` int(11) NOT NULL,
15+
`status` varchar(50) DEFAULT NULL,
16+
PRIMARY KEY (`order_id`)
17+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
18+
19+
20+
-- 创建master0slave0数据库
21+
CREATE DATABASE IF NOT EXISTS `master0slave0`;
22+
USE `master0slave0`;
23+
24+
CREATE TABLE IF NOT EXISTS `t_order_0` (
25+
`order_id` bigint(20) NOT NULL,
26+
`user_id` int(11) NOT NULL,
27+
`status` varchar(50) DEFAULT NULL,
28+
PRIMARY KEY (`order_id`)
29+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
30+
31+
CREATE TABLE IF NOT EXISTS `t_order_1` (
32+
`order_id` bigint(20) NOT NULL,
33+
`user_id` int(11) NOT NULL,
34+
`status` varchar(50) DEFAULT NULL,
35+
PRIMARY KEY (`order_id`)
36+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
37+
38+
-- 创建master0slave1数据库
39+
CREATE DATABASE IF NOT EXISTS `master0slave1`;
40+
USE `master0slave1`;
41+
42+
CREATE TABLE IF NOT EXISTS `t_order_0` (
43+
`order_id` bigint(20) NOT NULL,
44+
`user_id` int(11) NOT NULL,
45+
`status` varchar(50) DEFAULT NULL,
46+
PRIMARY KEY (`order_id`)
47+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
48+
49+
CREATE TABLE IF NOT EXISTS `t_order_1` (
50+
`order_id` bigint(20) NOT NULL,
51+
`user_id` int(11) NOT NULL,
52+
`status` varchar(50) DEFAULT NULL,
53+
PRIMARY KEY (`order_id`)
54+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
55+
56+
57+
58+
-- 创建master1数据库
59+
CREATE DATABASE IF NOT EXISTS `master1`;
60+
USE `master1`;
61+
62+
CREATE TABLE IF NOT EXISTS `t_order_0` (
63+
`order_id` bigint(20) NOT NULL,
64+
`user_id` int(11) NOT NULL,
65+
`status` varchar(50) DEFAULT NULL,
66+
PRIMARY KEY (`order_id`)
67+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
68+
69+
CREATE TABLE IF NOT EXISTS `t_order_1` (
70+
`order_id` bigint(20) NOT NULL,
71+
`user_id` int(11) NOT NULL,
72+
`status` varchar(50) DEFAULT NULL,
73+
PRIMARY KEY (`order_id`)
74+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
75+
76+
77+
-- 创建master1slave0数据库
78+
CREATE DATABASE IF NOT EXISTS `master1slave0`;
79+
USE `master1slave0`;
80+
81+
CREATE TABLE IF NOT EXISTS `t_order_0` (
82+
`order_id` bigint(20) NOT NULL,
83+
`user_id` int(11) NOT NULL,
84+
`status` varchar(50) DEFAULT NULL,
85+
PRIMARY KEY (`order_id`)
86+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
87+
88+
CREATE TABLE IF NOT EXISTS `t_order_1` (
89+
`order_id` bigint(20) NOT NULL,
90+
`user_id` int(11) NOT NULL,
91+
`status` varchar(50) DEFAULT NULL,
92+
PRIMARY KEY (`order_id`)
93+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
94+
95+
-- 创建master1slave1数据库
96+
CREATE DATABASE IF NOT EXISTS `master1slave1`;
97+
USE `master1slave1`;
98+
99+
CREATE TABLE IF NOT EXISTS `t_order_0` (
100+
`order_id` bigint(20) NOT NULL,
101+
`user_id` int(11) NOT NULL,
102+
`status` varchar(50) DEFAULT NULL,
103+
PRIMARY KEY (`order_id`)
104+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
105+
106+
CREATE TABLE IF NOT EXISTS `t_order_1` (
107+
`order_id` bigint(20) NOT NULL,
108+
`user_id` int(11) NOT NULL,
109+
`status` varchar(50) DEFAULT NULL,
110+
PRIMARY KEY (`order_id`)
111+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

0 commit comments

Comments
 (0)