ShardingSphere是开源的分布式数据库中间件解决方案组成的生态圈,由Sharding-jdbc、Sharding-Proxy等组成,提供标准化的数据分片、安全控制、分布式事务和数据库治理功能,本文主要介绍sharding-db在项目中的使用。
Sharding-db是对Sharding-jdbc的功能封装,方便功能的对接,统一项目团队对数据源的对接
项目地址:sharding-db
Sharding-jdbc分片过程
Sharding-jdbc根据SQL语句进行词语解析,上下文匹配数据库和表的分片策略生成路由路径,将分表配置中的逻辑库表改写为真实库表SQL语句,发送到底层数据源执行,将从各个数据节点获取的多数据结果集,组合成为一个结果集并正确的返回至请求客户端。
POM配置
1 2 3 4 5
| <dependency> <groupId>cn.weiecho</groupId> <artifactId>sharding-db</artifactId> <version>1.0.3</version> </dependency>
|
Database配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
@Configuration public class DatabaseConfig extends DatabaseSingletonConfigurator {
}
@Configuration public class DatabaseConfig extends DatabaseMasterSlaveConfigurator {
}
@Configuration public class DatabaseConfig extends DatabaseShardingConfigurator {
}
|
配置文件
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
| sharding.jdbc: default-data-source-name: ms_ds_0 data-sources: ds_master: driver-class-name: com.mysql.cj.jdbc.Driver type: com.zaxxer.hikari.HikariDataSource jdbc-url: jdbc:mysql://127.0.0.1:3306/test_db?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull username: root password: root initial-size: 1 minimum-idle: 3 maximum-pool-size: 20 idle-timeout: 60000 max-lifetime: 180000 connection-test-query: select 1 test-while-idle: true test-on-borrow: true connection-init-sql: set names utf8mb4 ds_slave: driver-class-name: com.mysql.cj.jdbc.Driver type: com.zaxxer.hikari.HikariDataSource jdbc-url: jdbc:mysql://127.0.0.1:3307/test_db?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull username: root password: root initial-size: 1 minimum-idle: 3 maximum-pool-size: 20 idle-timeout: 60000 max-lifetime: 180000 connection-test-query: select 1 test-while-idle: true test-on-borrow: true connection-init-sql: set names utf8mb4 master-slave-rules: - name: ms_ds_0 master-data-source-name: ds_master slave-data-source-names: ds_slave load-balance-strategy: round_robin
|
分表策略配置
重写DatabaseShardingConfigurator 的分表策略实现相关功能
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
public Collection<TableRuleConfiguration> tableRuleConfigs() { return Collections.emptyList(); }
public Collection<String> bindingTableGroups() { return Collections.emptyList(); }
|
数据安全配置(脱敏)
敏感数据脱敏,重写DatabaseShardingConfigurator的加密规则实现相关功能
1 2 3 4 5 6 7
|
public EncryptRuleConfiguration encryptRuleConfig() { return null; }
|
广播表策略
用于数据源分片下,每个数据源都保存相同表全量数据,如字典表,配置表等
1 2 3 4 5 6 7 8
|
public Collection<String> broadcastTables() { return Collections.emptyList(); }
|
强制路由至主库
1 2
| HintManager hintManager = HintManager.getInstance(); hintManager.setMasterRouteOnly();
|
推荐使用try with resource方式
1 2 3 4
| try (HintManager hintManager = HintManager.getInstance()) { hintManager.setMasterRouteOnly();
}
|
强制路由至指定读库
1 2
| HintManager hintManager = HintManager.getInstance(); hintManager.setDatabaseShardingValue(1);
|
推荐使用try with resource方式
1 2 3 4
| try (HintManager hintManager = HintManager.getInstance()) { hintManager.setDatabaseShardingValue(1);
}
|