mysql--使用shardingsphere實現分表
阿新 • • 發佈:2021-07-21
一. 簡介
為什麼要分表,無非就兩個原因,要麼是併發太高,要麼就是資料量太大。
所謂分表就是把傳統的單表擴充套件為多個數據結構一樣的表,通過分表策略確定操作哪一張表。
我使用的分表規則是通過主鍵id進行取模運算。
例如user表,假設分三個表:user_0 user_1 user_2
插入操作:
假設新增一個使用者主鍵id為1 1%3 = 1
該使用者將會插入到user_1表中
查詢操作:
查詢操作時shardingsphere會將個個表中的id進行排序後返回
手把手在springboot中通過shardingsphere實現mysql的分表操作。
ShardingSphere是一套開源的分散式資料庫中介軟體解決方案組成的生態圈。它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(計劃中)這3款相互獨立的產品組成,shardingSphere定位為關係型資料庫中介軟體。 該文章中我們主要對Sharding-JDBC做簡單的使用,更多更深入的內容鐵子們可以自行去深入瞭解。
二. 編碼階段
1. 依賴引入(主要依賴)
1 <dependency> 2 <groupId>org.mybatis.spring.boot</groupId> 3 <artifactId>mybatis-spring-boot-starter</artifactId> 4 <version>2.2.0</version> 5 </dependency> 6 <!--druid資料來源--> 7 <dependency> 8 <groupId>com.alibaba</groupId> 9<artifactId>druid-spring-boot-starter</artifactId> 10 <version>1.2.1</version> 11 </dependency> 12 <!--shardingsphere--> 13 <dependency> 14 <groupId>org.apache.shardingsphere</groupId> 15 <artifactId>sharding-jdbc-spring-boot-starter</artifactId> 16<version>4.0.0-RC1</version> 17 </dependency> 18 <dependency> 19 <groupId>org.apache.shardingsphere</groupId> 20 <artifactId>sharding-jdbc-spring-namespace</artifactId> 21 <version>4.0.0-RC1</version> 22 </dependency> 23 <!--jdbc--> 24 <dependency> 25 <groupId>mysql</groupId> 26 <artifactId>mysql-connector-java</artifactId> 27 <version>8.0.22</version> 28 </dependency>
2. 修改配置檔案
1 #mybatis資訊 2 mybatis: 3 mapper-locations: classpath:mapping/*Mapper.xml 4 type-aliases-package: com.example.demo.entity 5 6 Spring: 7 shardingsphere: 8 datasource: 9 names: master #配置資料來源 10 master: 11 type: com.alibaba.druid.pool.DruidDataSource 12 driver-class-name: com.mysql.cj.jdbc.Driver 13 url: jdbc:mysql://127.0.0.1:3306/test_1?serverTimezone=Asia/Shanghai&useSSL=false&allowMultiQueries=true 14 username: lv1 15 password: 123456 16 #配置分表規則 17 sharding: 18 #指定所需分的表 19 tables: 20 #表user_ 21 user_: 22 actual-data-nodes: master.user_$->{0..2} #需要分表的表 user_0 user_1 user_2 23 table-strategy: 24 inline: 25 sharding-column: id #主鍵 26 algorithm-expression: user_$->{id % 3} #分表規則 27 #表order_ 28 order_: 29 actual-data-nodes: master.order_$->{0..2} #需要分表的表 30 table-strategy: 31 inline: 32 sharding-column: id #主鍵 33 algorithm-expression: order_$->{id % 3} #分表規則 34 props: 35 sql: 36 show: true
3. 測試
@RestController @RequestMapping("/user") @Api(tags = "使用者相關") public class UserController { @Autowired private UserService userService; @PostMapping(value = "/create") @ApiOperation(value = "建立使用者") public Object create(){ List<User> users = new ArrayList<>(); User user1 = new User(1, "Echo", 1, 18, "貴陽"); User user2 = new User(2, "Echo", 1, 18, "貴陽"); User user3 = new User(3, "Echo", 1, 18, "貴陽"); User user4 = new User(4, "Echo", 1, 18, "貴陽"); User user5 = new User(5, "Echo", 1, 18, "貴陽"); User user6 = new User(6, "Echo", 1, 18, "貴陽"); users.add(user1); users.add(user2); users.add(user3); users.add(user4); users.add(user5); users.add(user6); return userService.insertForeach(users); } @GetMapping(value = "get") @ApiOperation(value = "獲取使用者資訊") private Object list(){ return userService.list(); } }
4. 測試結果
插入效果:
查詢效果:
本文來自部落格園,作者:EchoLv,轉載請註明原文連結:https://www.cnblogs.com/lvdeyinBlog/p/15040145.html