咱們的項目,不少都涉及到了數據庫的操做。數據庫的穩定性顯得尤其重要。互聯網公司不少都採用「一主多從」的實現方案,我這裏也不例外。這樣能夠大大減小主庫的讀壓力,從而提升數據庫性能!mysql
同時,選擇一套靠譜的中間件來實現讀寫分離,也尤其重要。一般有幾個選擇:spring
這裏,考慮到性能需求,我選擇了sharding-jdbc。sql
直接上實現!數據庫
依賴apache
下面兩個依賴,根據選擇的版本不一樣,選擇的依賴包不一樣:dom
- Sharding-Sphere版:(3.0及以後的版本)
<dependency> <groupId>io.shardingsphere</groupId> <artifactId>sharding-jdbc</artifactId> <version>${latest.release.version}</version> </dependency>- Sharding-JDBC版:(3.0以前的版本)
<!-- 引入sharding-jdbc核心模塊 --> <dependency> <groupId>io.shardingjdbc</groupId> <artifactId>sharding-jdbc-core-spring-boot-starter</artifactId> <version>2.0.3</version> </dependency>
配置spring-boot
sharding: jdbc: datasource: names: ds_master,ds_slave_0,ds_slave_1 ds_master: type: org.apache.commons.dbcp.BasicDataSource driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://10.112.1.1:3306/gome_axwl_fc?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true username: test password: test ds_slave_0: type: org.apache.commons.dbcp.BasicDataSource driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://10.112.1.2:3306/gome_axwl_fc?useUnicode=true&characterEncoding=utf-8 username: test password: test ds_slave_1: type: org.apache.commons.dbcp.BasicDataSource driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://10.112.1.3:3306/gome_axwl_fc?useUnicode=true&characterEncoding=utf-8 username: test password: test config: masterslave: load-balance-algorithm-type: round_robin name: ds_ms master-data-source-name: ds_master slave-data-source-names: ds_slave_0,ds_slave_1這裏配置了一個主庫(ds_master),兩個從庫(ds_slave_0、ds_slave_1)。
從庫的讀取規則爲round_robin(輪詢策略),除了輪詢策略,還有支持random(隨機策略)。性能