淺談sharding jdbc

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

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

Sharding-JDBC

配置說明

#### 經常使用配置

spring.shardingsphere.datasource.names= #數據源名稱,多數據源以逗號分隔

spring.shardingsphere.sharding.tables.<logic-table-name>.actual-data-nodes= #由數據源名 + 表名組成,以小數點分隔。多個表以逗號分隔,支持inline表達式。缺省表示使用已知數據源與邏輯表名稱生成數據節點。用於廣播表(即每一個庫中都須要一個一樣的表用於關聯查詢,多爲字典表)或只分庫不分表且全部庫的表結構徹底一致的狀況

##### 分庫策略,缺省表示使用默認分庫策略,如下的分片策略只能選其一

##### 用於單分片鍵的標準分片場景
spring.shardingsphere.sharding.tables.<logic-table-name>.database-strategy.standard.sharding-column= #分片列名稱
spring.shardingsphere.sharding.tables.<logic-table-name>.database-strategy.standard.precise-algorithm-class-name= #精確分片算法類名稱,用於=和IN。該類需實現PreciseShardingAlgorithm接口並提供無參數的構造器
spring.shardingsphere.sharding.tables.<logic-table-name>.database-strategy.standard.range-algorithm-class-name= #範圍分片算法類名稱,用於BETWEEN,可選。該類需實現RangeShardingAlgorithm接口並提供無參數的構造器

##### 用於多分片鍵的複合分片場景
spring.shardingsphere.sharding.tables.<logic-table-name>.database-strategy.complex.sharding-columns= #分片列名稱,多個列以逗號分隔
spring.shardingsphere.sharding.tables.<logic-table-name>.database-strategy.complex.algorithm-class-name= #複合分片算法類名稱。該類需實現ComplexKeysShardingAlgorithm接口並提供無參數的構造器

##### 行表達式分片策略
spring.shardingsphere.sharding.tables.<logic-table-name>.database-strategy.inline.sharding-column= #分片列名稱
spring.shardingsphere.sharding.tables.<logic-table-name>.database-strategy.inline.algorithm-expression= #分片算法行表達式,需符合groovy語法

##### Hint分片策略
spring.shardingsphere.sharding.tables.<logic-table-name>.database-strategy.hint.algorithm-class-name= #Hint分片算法類名稱。該類需實現HintShardingAlgorithm接口並提供無參數的構造器

##### 分表策略,同分庫策略
spring.shardingsphere.sharding.tables.<logic-table-name>.table-strategy.xxx= #省略

spring.shardingsphere.sharding.tables.<logic-table-name>.key-generator.column= #自增列名稱,缺省表示不使用自增主鍵生成器
spring.shardingsphere.sharding.tables.<logic-table-name>.key-generator.type= #自增列值生成器類型,缺省表示使用默認自增列值生成器。可以使用用戶自定義的列值生成器或選擇內置類型:SNOWFLAKE/UUID/LEAF_SEGMENT
spring.shardingsphere.sharding.tables.<logic-table-name>.key-generator.props.<property-name>= #屬性配置, 注意:使用SNOWFLAKE算法,須要配置worker.id與max.tolerate.time.difference.milliseconds屬性。若使用此算法生成值做分片值,建議配置max.vibration.offset屬性

spring.shardingsphere.sharding.binding-tables[0]= #綁定表規則列表

spring.shardingsphere.sharding.broadcast-tables[0]= #廣播表規則列表

spring.shardingsphere.sharding.default-data-source-name= #未配置分片規則的表將經過默認數據源定位
spring.shardingsphere.sharding.default-database-strategy.xxx= #默認數據庫分片策略,同分庫策略
spring.shardingsphere.sharding.default-table-strategy.xxx= #默認表分片策略,同分表策略
spring.shardingsphere.sharding.default-key-generator.type= #默認自增列值生成器類型,缺省將使用org.apache.shardingsphere.core.keygen.generator.impl.SnowflakeKeyGenerator。可以使用用戶自定義的列值生成器或選擇內置類型:SNOWFLAKE/UUID/LEAF_SEGMENT
spring.shardingsphere.sharding.default-key-generator.props.<property-name>= #自增列值生成器屬性配置, 好比SNOWFLAKE算法的worker.id與max.tolerate.time.difference.milliseconds

spring.shardingsphere.sharding.master-slave-rules.<master-slave-data-source-name>.master-data-source-name= #詳見讀寫分離部分
spring.shardingsphere.sharding.master-slave-rules.<master-slave-data-source-name>.slave-data-source-names[0]= #詳見讀寫分離部分
spring.shardingsphere.sharding.master-slave-rules.<master-slave-data-source-name>.load-balance-algorithm-class-name= #詳見讀寫分離部分
spring.shardingsphere.sharding.master-slave-rules.<master-slave-data-source-name>.load-balance-algorithm-type= #詳見讀寫分離部分

spring.shardingsphere.props.sql.show= #是否開啓SQL顯示,默認值: false

分片實現原理

SQL解析 => 執行器優化 => SQL路由 => SQL改寫 => SQL執行 => 結果歸併git

數據分片流程

功能結構

ShardingDataSourceFactory用於建立分庫分表或分庫分表+讀寫分離的JDBC驅動
MasterSlaveDataSourceFactory用於建立獨立使用讀寫分離的JDBC驅動。
ShardingRuleConfiguration是分庫分表配置的核心和入口,它能夠包含多個TableRuleConfiguration和MasterSlaveRuleConfiguration。
每一組相同規則分片的表配置一個TableRuleConfiguration。若是須要分庫分表和讀寫分離共同使用,每個讀寫分離的邏輯庫配置一個MasterSlaveRuleConfiguration。
每一個TableRuleConfiguration對應一個ShardingStrategyConfiguration算法

分庫分表標準

阿里分庫分表標準

這裏要說的是數據庫切分確實能夠解決數據庫的單點問題,可是它也會帶來總體服務切分後的數據庫操做的複雜度.spring

  • 參考資料:

Sharding-JDBC:單庫分表的實現sql

shardingsphere快速入門數據庫

<p><a href="https://gitee.com/zzlh_liulei1/sharding-jdbc.git">demo碼雲地址</a></p>express

相關文章
相關標籤/搜索