sharding是什么
- 数据分段
- 分布式事务
- 读写分离
- 数据库网管
- 流量治理
- 数据迁移
- 数据加密
- 数据脱敏
快速入门
导入依赖
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-jdbc</artifactId>
<version>4.1.1</version>
</dependency>
yml配置
# JDBC 逻辑库名称。在集群模式中,使用该参数来联通 ShardingSphere-JDBC 与 ShardingSphere-Proxy。
# 默认值:logic_db
databaseName (?):
mode:
dataSources:
rules:
- !FOO_XXX
...
- !BAR_XXX
...
props:
key_1: value_1
key_2: value_2
application.properties配置
# 配置 DataSource Driver
spring.datasource.driver-class-name=org.apache.shardingsphere.driver.ShardingSphereDriver
# 指定 YAML 配置文件
spring.datasource.url=jdbc:shardingsphere:classpath:xxx.yaml
数据分片功能
在设计开发中mysql数据量增大,查询io次数增加,查询出现缓慢的问题
如果解决这个问题
就是进行分库的方式
比如订单表的方式
订单数据量有1w
查询订单每次都需要花费30秒的时候
使用数据分片功能
把order分为order_1和order_2的表的方式
插入策略配置奇偶的方式
查询速度就会提升到10-15秒之内
这个使用在数据表量大
还有一个拆分的方式叫做垂直拆分的方式
把俩个表分别存储在不同库中的方式
比如
我们有一个user表和order在db库中
我们把user表存储在db01把order存储在db02
查询速度也会提升
读写分离的方式
比如我们现在有进行水平拆分的方式把order表
拆分成俩个表的方式
order_1,order_2
我们可以配置在order_1表中进行读取数据
在order_2进行写入数据,
通过order_2从库同步到order_1表中的方式
数据网关
比如我们配置8个数据库
每个数据库对应不同服务
我们可以通过配置方式,插入每个数据库,查询每个数据库
流量控制
比如我们现在有3个数据库
order_1,order_2,order_3
现在order_1访问量突然增加了
导致order_1io极速上升,如果不进行手动控制,会导致数据库奔溃
在开始的我们配置,sharding访问控制达到100访问量,进行自动熔断的方式
如果来101用户,我们主动提示,系统业务繁忙进行稍后处理的方式
问题
一直出现数据源找不到
配置信息和数据源的方式