Spring-boot2X基於sharding-jdbc3.x分表分庫

ShardingSphere是一套開源的分佈式數據庫中間件解決方案組成的生態圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(計劃中)這3款相互獨立的產品組成。他們均提供標準化的數據分片、分佈式事務和數據庫治理功能,可適用於如Java同構、異構語言、雲原生等各類多樣化的應用場景。java

ShardingSphere定位爲關係型數據庫中間件,旨在充分合理地在分佈式的場景下利用關係型數據庫的計算和存儲能力,而並不是實現一個全新的關係型數據庫。node

Sharding-JDBCmysql

定位爲輕量級Java框架,在Java的JDBC層提供的額外服務。 它使用客戶端直連數據庫,以jar包形式提供服務,無需額外部署和依賴,可理解爲加強版的JDBC驅動,徹底兼容JDBC和各類ORM框架。spring

  • 適用於任何基於Java的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。
  • 基於任何第三方的數據庫鏈接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等。
  • 支持任意實現JDBC規範的數據庫。目前支持MySQL,Oracle,SQLServer和PostgreSQL。

 

在數據量不是不少的狀況下,能夠將數據庫進行讀寫分離,以應對高併發的需求,經過水平擴展從庫,來緩解查詢的壓力sql

在數據量達到500萬的時候,能夠將數據進行分表存儲數據庫

在數據量繼續擴大,能夠考慮分庫分表,將數據存儲在不一樣數據庫的不一樣表中express

Sharding-JDBC分片策略存有兩種維度:apache

  • 數據源分片策略(DatabaseShardingStrategy):數據被分配的目標數據源
  • 表分片策略(TableShardingStrategy):數據被分配的目標表

1.應用api

spring boot 版本:2.1.8.RELEASE服務器

沒使用最新的4.x,採用的3.x

(1)添加依賴

<dependency>
       <groupId>javax.persistence</groupId>
       <artifactId>persistence-api</artifactId>
       <version>1.0.2</version>
</dependency>

<dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
       <scope>runtime</scope>
</dependency>

<dependency>
       <groupId>org.mybatis.spring.boot</groupId>
       <artifactId>mybatis-spring-boot-starter</artifactId>
       <version>2.0.0</version>
</dependency>

<dependency>
       <groupId>com.alibaba</groupId>
       <artifactId>druid-spring-boot-starter</artifactId>
       <version>1.1.20</version>
</dependency>

<dependency>
       <groupId>io.shardingsphere</groupId>
       <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
       <version>3.1.0</version>
</dependency>

<dependency>
      <groupId>io.shardingsphere</groupId>
      <artifactId>sharding-jdbc-spring-namespace</artifactId>
      <version>3.1.0</version>
</dependency>
<dependency>
     <groupId>org.projectlombok</groupId>
     <artifactId>lombok</artifactId>
     <optional>true</optional>
</dependency>

(2)增長配置

##數據庫配置
sharding.jdbc.datasource.names=ds0,ds1

sharding.jdbc.datasource.ds0.type=com.alibaba.druid.pool.DruidDataSource
sharding.jdbc.datasource.ds0.driver-class-name=com.mysql.cj.jdbc.Driver
sharding.jdbc.datasource.ds0.url=jdbc:mysql://localhost:3306/db0?serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull&allowPublicKeyRetrieval=true
sharding.jdbc.datasource.ds0.username=root
sharding.jdbc.datasource.ds0.password=root

sharding.jdbc.datasource.ds1.type=com.alibaba.druid.pool.DruidDataSource
sharding.jdbc.datasource.ds1.driver-class-name=com.mysql.cj.jdbc.Driver
sharding.jdbc.datasource.ds1.url=jdbc:mysql://localhost:3306/db1?serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull&allowPublicKeyRetrieval=true
sharding.jdbc.datasource.ds1.username=root
sharding.jdbc.datasource.ds1.password=root

sharding.jdbc.config.sharding.default-data-source-name=ds0
sharding.jdbc.config.sharding.default-database-strategy.inline.sharding-column=file_id
sharding.jdbc.config.sharding.default-database-strategy.inline.algorithm-expression=ds$->{file_id % 2}

sharding.jdbc.config.sharding.tables.assets.actual-data-nodes=ds$->{0..1}.assets$->{0..5}
sharding.jdbc.config.sharding.tables.assets.table-strategy.inline.sharding-column=id
sharding.jdbc.config.sharding.tables.assets.table-strategy.inline.algorithm-expression=assets$->{id % 6}
sharding.jdbc.config.sharding.tables.assets.key-generator-column-name=id

sharding.jdbc.config.sharding.tables.structures.key-generator-column-name=id

sharding.jdbc.config.sharding.binding-tables=files
sharding.jdbc.config.sharding.props.sql.show=true

說明:

sharding.jdbc.config.sharding.default-database-strategy.inline.sharding-column 配置的分庫的字段

sharding.jdbc.config.sharding.default-database-strategy.inline.algorithm-expression 配置的分庫的邏輯,根據file_id%2進行分

sharding.jdbc.config.sharding.tables.assets.actual-data-nodes  配置的是user表在真實數據庫中的位置

sharding.jdbc.config.sharding.tables.assets.table-strategy.inline.sharding-column 配置assets表數據切分的字段

sharding.jdbc.config.sharding.tables.assets.table-strategy.inline.algorithm-expression=assets$->{id % 6}  配置assets表數據切分的策略

  files表不分庫

  structures表只分庫部分表

更多能夠查看文檔 https://shardingsphere.apache.org/document/legacy/3.x/document/cn/manual/sharding-jdbc/usage/sharding/

2.擴容

  採用雙倍擴容的方案 

  從2臺服務器擴到4臺,接着再擴到8臺……

相關文章
相關標籤/搜索