# sharding-jdbc-test
**Repository Path**: hdgjun_gitee/sharding-jdbc-test
## Basic Information
- **Project Name**: sharding-jdbc-test
- **Description**: 基于 SpringBoot + ShardingSphere(Sharding-JDBC)+ Flyway + JOOQ + Gradle 的水平分表测试项目
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 3
- **Created**: 2021-06-29
- **Last Updated**: 2023-01-13
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## 基于 SpringBoot + ShardingSphere(Sharding-JDBC)+ Flyway + JOOQ + Gradle 的水平分表测试项目
## 一、Sharding-JDBC 与 JOOQ 的兼容性测试
- **测试项**
- 不分片时,使用默认数据源的增、删、改、查
- 分片时,使用`ShardingDataSource`数据源的增、删、改、查
- 分片表与不分片表的连表查询
- 分片表的分页查询
- 单路由单个字段的查询
- 全路由 count 查询
- 全路由 max 查询
- 不分片表的事务
- 分片表的事务
- 维护不分片表和分片表的表操作在同一个事务中
- **结论:** 本项目主要测试 Sharding-JDBC 与 JOOQ 的兼容性,就测试结果来看,所以测试项均兼容
## 二、Sharding-JDBC VS JDBC 性能测试
- **压测环境:MacBook Pro,处理器:2.3GHz、双核、Intel Core i5,内存:8GB、2133MHz LPDDR3**
- **分片数量:30**
- **测试数据基数:一百万条左右**
- **压测汇总表**
- **分片:** 单库多表,通过 Sharding-JDBC 水平分表后操作
- **不分片:** 单库单表,通过 JDBC 操作
| - | 线程数 | 测试时长 | 吞吐量 | 最小延迟(单位:ms) | 平均延迟(单位:ms) | 最大延迟(单位:ms) |
| :--------: | :----: | :------: | :----: | :------------------: | :------------------: | :------------------: |
| 分片插入 | 100 | 50s | 87/s | 84.61 | 1154.35 | 4312.13 |
| 分片插入 | 300 | 50s | 86/s | 83.78 | 3372.41 | 10074.58 |
| 分片插入 | 500 | 50s | 87/s | 82.05 | 5770.71 | 18790.38 |
| 不分片插入 | 100 | 50s | 56/s | 112.36 | 1754.26 | 7439.54 |
| 不分片插入 | 300 | 50s | 60/s | 105.79 | 4852.61 | 11497.53 |
| 不分片插入 | 500 | 50s | 74/s | 100.33 | 6737.00 | 21844.40 |
| 分片读 | 100 | 50s | 192/s | 36.27 | 508.03 | 5665.64 |
| 分片读 | 300 | 50s | 217/s | 35.22 | 1388.15 | 8234.14 |
| 分片读 | 500 | 50s | 219/s | 35.50 | 2282.93 | 12085.62 |
| 不分片读 | 100 | 50s | 126/s | 63.90 | 792.03 | 4240.31 |
| 不分片读 | 300 | 50s | 111/s | 64.08 | 2629.48 | 10194.41 |
| 不分片读 | 500 | 50s | 98/s | 64.07 | 4924.64 | 14170.59 |
| 分片更新 | 100 | 50s | 132/s | 65.77 | 757.52 | 4707.86 |
| 分片更新 | 300 | 50s | 133/s | 60.19 | 2257.25 | 9191.09 |
| 分片更新 | 500 | 50s | 122/s | 65.01 | 3994.44 | 13505.07 |
| 不分片更新 | 100 | 50s | 86/s | 95.67 | 1151.40 | 6052.50 |
| 不分片更新 | 300 | 50s | 75/s | 94.99 | 3903.93 | 11014.60 |
| 不分片更新 | 500 | 50s | 81/s | 94.88 | 5790.05 | 14319.90 |
| 分片删 | 100 | 50s | 122/s | 65.14 | 814.10 | 3853.16 |
| 分片删 | 300 | 50s | 132/s | 67.89 | 2280.78 | 7934.02 |
| 分片删 | 500 | 50s | 136/s | 36.97 | 3692.07 | 11425.84 |
| 不分片删 | 100 | 50s | 90/s | 15.50 | 1105.34 | 4286.00 |
| 不分片删 | 300 | 50s | 92/s | 95.55 | 3283.93 | 8169.72 |
| 不分片删 | 500 | 50s | 101/s | 96.61 | 4952.89 | 15578.29 |
- **结论:** 通过观察以上压测汇总表,可见,
`分片增、删、改、查的吞吐量` **>** `不分片增、删、改、查的吞吐量`
`分片增、删、改、查的延迟` **<** `不分片增、删、改、查的延迟`
## 三、踩坑
- **坑**
- 版本号兼容问题
- 多数据源的配置问题
- Flyway 与多数据源的兼容问题
- 不分片表与分片表的事务问题
- 等等
- **注意**
- 配置时,需要注意上面提到的`坑`