# 分库分表流程

## 一、数据库配置
![img.png](../img/基本开发文档/分库分表/配置-01.jpg)

在服务器/root/tmerclub/shardingsphere/conf/路径下新增该服务的配置
![img.png](../img/基本开发文档/分库分表/配置-02.jpg)

![img.png](../img/基本开发文档/分库分表/配置-03.jpg)
![img.png](../img/基本开发文档/分库分表/配置-04.jpg)


## 二、配置类

### 配置类的位置
 - 分库分表的功能模块下，都会在一个`tmerclub-common/tmerclub-common-sharding-proxy/src/main/java/com/mall4j/cloud/common/sharding/proxy`包下有自己的配置包

![img.png](../img/基本开发文档/分库分表/配置-05.jpg)

######包中会有三个类
- CustomDatabaseComplexKeysShardingAlgorithm： 根据分片的参数，获取数据库的分片名称
- CustomTableComplexKeysShardingAlgorithm： 根据分片的参数，获取数据表的分片名称
- ShardingAlgorithmHelper： 分片策略辅助组件，根据分片的参数，获取具体的分片编号

配置完成后打包，将该目录jar包复制到服务器`/root/tmerclub/shardingsphere/ext-lib/`位置下，替换原`tmerclub-common-sharding-proxy.jar`
![img.png](../img/基本开发文档/分库分表/配置-06.jpg)
## 三、注意事项

### 分表
- 同一个功能，相互之间有关联的表，分表数量尽量统一

### 使用sql插入数据（select）

- 查询时，至少要有一个分片的字段作为条件，否则会导致全表查询
- 分片字段作为范围条件时会导致全表查询，如果必须范围查询也要将范围放到一个数据表中，也就是再加一个分片字段，用于定位到目标表
- 查询的数据尽量是在一个表中的，比如查询一个用户的订单（一个用户的订单数据都存放在同一个表中）
- 如果涉及多个表的查询，尽量使用es

### 使用sql插入数据（insert）

- 表中的分片字段都不能为空，否则会报错

### 使用sql更新数据（update）

- 更新数据时，必须携带一个分片字段，用于定位更新的目标表
- 分片字段作为更新条件时，必须为等于（=），不能作为范围条件
- 分片字段是不能修改的（分片字段用于定位数据存储的库和表，所以保存后无法修改）
