sharding proxy下载地址:https://archive.apache.org/dist/shardingsphere/

下载之后需要在lib目录下放一个mysql的驱动jar包

分库分表

配置

sharding-proxy安装目录/conf/config-sharding.yaml

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
databaseName: sharding

dataSources:
ds_0:
url: jdbc:mysql://127.0.0.1:3306/sharding_db?serverTimezone=UTC&useSSL=false
username: root
password: 123456
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
minPoolSize: 1
ds_1:
url: jdbc:mysql://127.0.0.1:3316/sharding_db?serverTimezone=UTC&useSSL=false
username: root
password: 123456
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
minPoolSize: 1

rules:
- !SHARDING
tables:
t_user_sharding:
actualDataNodes: ds_${0..1}.t_user_sharding${0..1}
tableStrategy:
standard:
shardingColumn: id
shardingAlgorithmName: t_user_inline
keyGenerateStrategy:
column: id
keyGeneratorName: snowflake
bindingTables:
- t_user_sharding
defaultDatabaseStrategy:
standard:
shardingColumn: id
shardingAlgorithmName: database_inline
defaultTableStrategy:
none:

shardingAlgorithms:
database_inline:
type: INLINE
props:
algorithm-expression: ds_${id % 2}
t_user_inline:
type: INLINE
props:
algorithm-expression: t_user_${id % 2}

keyGenerators:
snowflake:
type: SNOWFLAKE

auditors:
sharding_key_required_auditor:
type: DML_SHARDING_CONDITIONS
  • dataSources:配置的实际的节点,可以配置到库,mycat只能配置到连接
  • rules:配置规则
  • rules.tables:定义表以及表的相关配置,有些配置没有实际定义,需要从下面的策略中选择
  • rules.bindingTables:配置表,从上述定义表中选择
  • rules.defaultDatabaseStrategy:配置默认的分库策略,这里只是配置,但没有定义实际的策略,实际的策略从下面的配置选择
  • rules.shardingAlgorithms:定义实际的分库分表策略,就是上面配置的
  • rules.keyGenerators:主键生成策略,就是上面配置的

Java端测试

这里用的是sharding proxy5.4.0版本,如果用sharding proxy5.4.0之前的版本,会出现“Unknown system variable ‘query_cache_size’”错误

读写分离

配置

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
37
38
39
40
41
42
43
44
45
46
databaseName: read_write

dataSources:
write_ds:
url: jdbc:mysql://127.0.0.1:3306/write_read?serverTimezone=UTC&useSSL=false
username: root
password: 123456
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
minPoolSize: 1
read_ds_0:
url: jdbc:mysql://127.0.0.1:3316/write_read?serverTimezone=UTC&useSSL=false
username: root
password: 123456
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
minPoolSize: 1

rules:
- !READWRITE_SPLITTING
dataSources:
readwrite_ds:
writeDataSourceName: write_ds
readDataSourceNames:
- read_ds_0
loadBalancerName: random
loadBalancers:
random:
type: RANDOM

- !SHARDING
tables:
t_user_sharding:
actualDataNodes: write_ds.t_user_sharding
keyGenerateStrategy:
column: id
keyGeneratorName: snowflake
bindingTables:
- t_user_sharding
keyGenerators:
snowflake:
type: SNOWFLAKE

这里除了用到读写分离策略,还用到了分库分表策略(实际配置并没有分库分表),是为了自动生成id

Java端测试

Sharding JDBC

sharding jdbc可以理解为sharding proxy本地版,不需要再引入中间件添加系统复杂性了

sharding配置

这里的配置可以直接用sharding proxy conf目录下的配置,两者是同一个东西

数据源配置

1
2
3
4
# 配置 DataSource Driver
spring.datasource.driver-class-name=org.apache.shardingsphere.driver.ShardingSphereDriver
# 指定 YAML 配置文件
spring.datasource.url=jdbc:shardingsphere:classpath:config-sharding.yaml

这里不需要配置账号和密码,url使用上面的sharding配置,驱动使用sharding自带的驱动即可

Java端测试


本站总访问量:次本站总访问数:人
本站由 Peng Tong 使用 Stellar 1.29.1 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。