1. 背景
5.3.0
このバージョンより前のバージョンでは、 、、の設定方法がShardingSphere-JDBC
同時にサポートされています。その中で、Springの設定方法と互換性を持たせるために、以下のような問題がコミュニティに持ち込まれています。Java API
YAML
Spring Boot Starter
Spring Namespace
- APIを追加・更新する場合、複数の設定ファイルを調整する必要があり、多大な作業が必要となる
- コミュニティは複数の設定ドキュメントと例を維持する必要があります
Spring Bean
ライフサイクル管理は、プロジェクトの他の依存関係に対して脆弱です (例: 適切に機能しPostProcessor
ないSpring Boot Starter
そして、Spring Namespace
構成スタイルはShardingSphere
標準とはかなり異なりYAML
ますSpring Boot Starter
バージョンの影響を受けるため、追加の構成互換性の問題が発生しますSpring Namespace
。Spring
上記の考慮事項に基づいて、コミュニティはのすべての依存関係と構成サポートを削除することを決定しました。ShardingSphere
ShardingSphere 5.3.0 Release
Spring
ではSpring Boot
、または を使用する必要があるユーザーはSpring Namespace
、元のユーザーにアクセスし、アップグレードする方法を教えてください。この記事では、これらの質問に答えます。ShardingSphere-JDBC
ShardingSphere
2. 影響範囲
2.1 Maven の依存関係
Spring Boot プロジェクトを例として、それ以降のバージョンにアップグレードするShardingSphere 5.3.0
と、元の関連依存関係が無効になります。
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
<version>${shardingsphere.version}</version>
</dependency>
に調整:
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-jdbc-core</artifactId>
<version>${shardingsphere.version}</version>
</dependency>
2.2 カスタムアルゴリズム
Spring
モジュールを削除すると、AlgorithmProvided
関連するクラスも削除されます。ユーザーが以前にカスタム アルゴリズムでBean
インジェクション、更新後は無効になります。アルゴリズムでSpring Bean
使用する、開発者はそれらを積極的に管理する必要があります。
2.3 トランザクション
@ShardingSphereTransactionType
メソッドレベルのトランザクション宣言をサポートするために使用されるアノテーションも削除されます。ユーザーがメソッド レベルでトランザクション タイプを変更する必要がある場合は、Java API
メソッドを。
分散トランザクションについては、詳細な構成アップグレードのドキュメントが後で整理される予定です。
2.4 設定ファイル
5.3.0
バージョンをアップグレードすると、元の構成Spring Boot Starter
またはSpring Namespace
データソース構成は無効になります。
3. アップグレードガイド
3.1 ShardingSphere ドライバーの概要
5.1.2
このバージョンからは、コードを変更せずに構成を通じてのみアクセスして使用できるShardingSphere-JDBC
ネイティブJDBC
ドライバー。ShardingSphereDriver
このアクセス方法を使用すると、より統一されShardingSphere-JDBC
一貫性のあるShardingSphere-Proxy
構成ファイル形式を、わずかな変更を加えるだけで再利用できます。
5.3.x
バージョンにアップグレードした後、 を使用しているユーザー、またはからアクセスすることをお勧めします。Spring Boot Starter
Spring Namespace
ShardingSphereDriver
ShardingSphere-JDBC
3.2 Spring Boot Starter を使用したアップグレード ガイド
私の前回の記事を例に挙げてみましょう。
Spring Boot は ShardingSphere シャーディング ツール AutoTable を統合 (2) - 自動シャーディング アルゴリズムの例 | Spring Cloud 46
依存関係を置き換えるには、第2.1章を参照してください。
Maven
3.2.1 設定ファイルのアップグレード
3.2.1.1 アップグレード前
application.yml
:
server:
port: 8844
spring:
application:
name: @artifactId@
shardingsphere:
# 数据源配置
datasource:
names: ds1,ds2
ds1:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.0.35:3306/db1?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai
username: root
password: '1qaz@WSX'
ds2:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.0.46:3306/db2?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai
username: root
password: '1qaz@WSX'
# 定义规则
rules:
sharding:
# 采用自动分片算法
autoTables:
# 取模
t_auto_order_mod:
actualDataSources: ds$->{
1..2}
sharding-strategy:
standard:
sharding-column: order_id
sharding-algorithm-name: auto_order_mod
# 分布式序列策略
key-generate-strategy:
# 自增列名称,缺省表示不使用自增主键生成器
column: order_id
# 分布式序列算法名称
key-generator-name: snowflake
# 散列取模
t_auto_order_hash_mod:
actualDataSources: ds1
sharding-strategy:
standard:
sharding-column: order_id
sharding-algorithm-name: auto_order_hash_mod
# 分布式序列策略
key-generate-strategy:
# 自增列名称,缺省表示不使用自增主键生成器
column: order_id
# 分布式序列算法名称
key-generator-name: snowflake
# 容量范围
t_auto_order_volume_range:
actualDataSources: ds$->{
1..2}
sharding-strategy:
standard:
sharding-column: price
sharding-algorithm-name: auto_order_volume_range
# 分布式序列策略
key-generate-strategy:
# 自增列名称,缺省表示不使用自增主键生成器
column: order_id
# 分布式序列算法名称
key-generator-name: snowflake
# 边界范围
t_auto_order_boundary_range:
actualDataSources: ds$->{
1..2}
sharding-strategy:
standard:
sharding-column: price
sharding-algorithm-name: auto_order_boundary_range
# 分布式序列策略
key-generate-strategy:
# 自增列名称,缺省表示不使用自增主键生成器
column: order_id
# 分布式序列算法名称
key-generator-name: snowflake
# 自动日期间隔
t_auto_order_auto_interval:
actualDataSources: ds$->{
1..2}
sharding-strategy:
standard:
sharding-column: create_time
sharding-algorithm-name: auto_order_auto_interval
# 分布式序列策略
key-generate-strategy:
# 自增列名称,缺省表示不使用自增主键生成器
column: order_id
# 分布式序列算法名称
key-generator-name: snowflake
# 分片算法配置
sharding-algorithms:
# 取模
auto_order_mod:
type: MOD
props:
sharding-count: 6
# 散列取模
auto_order_hash_mod:
type: HASH_MOD
props:
sharding-count: 6
# 容量范围
auto_order_volume_range:
type: VOLUME_RANGE
props:
range-lower: 0
range-upper: 20000
sharding-volume: 10000
# 边界范围
auto_order_boundary_range:
type: BOUNDARY_RANGE
props:
sharding-ranges: 10,15,100,12000,16000
# 自动日期间隔
auto_order_auto_interval:
type: AUTO_INTERVAL
props:
datetime-lower: 2023-05-07 00:00:00
datetime-upper: 2023-05-10 00:00:00
sharding-seconds: 86400
# 分布式序列算法配置(如果是自动生成的,在插入数据的sql中就不要传id,null也不行,直接插入字段中就不要有主键的字段)
keyGenerators:
# 分布式序列算法名称
snowflake:
# 分布式序列算法类型
type: SNOWFLAKE
props:
sql-show: true #显示sql
mybatis:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
3.2.1.2 アップグレード後
application.yml
: 元のShardingSphere
関連構成をShardingSphereDriver
構成アイテムに置き換えます。
server:
port: 8844
spring:
application:
name: @artifactId@
datasource:
driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver
url: jdbc:shardingsphere:classpath:shading-auto-tables-algorithm.yaml
mybatis:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
resources
ディレクトリの下にyaml
次のような新しい構成ファイルを作成し、「ユーザー マニュアル - YAML 構成」に従って元の構成コンテンツを書き換えます。shading-auto-tables-algorithm.yaml
dataSources:
ds1:
dataSourceClassName: com.zaxxer.hikari.HikariDataSource
driverClassName: com.mysql.cj.jdbc.Driver
jdbcUrl: jdbc:mysql://192.168.0.35:3306/db1?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai
username: root
password: '1qaz@WSX'
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
minPoolSize: 1
ds2:
dataSourceClassName: com.zaxxer.hikari.HikariDataSource
driverClassName: com.mysql.cj.jdbc.Driver
jdbcUrl: jdbc:mysql://192.168.0.46:3306/db2?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai
username: root
password: '1qaz@WSX'
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
minPoolSize: 1
rules:
- !SHARDING
autoTables:
# 取模
t_auto_order_mod:
actualDataSources: ds$->{
1..2}
shardingStrategy:
standard:
shardingColumn: order_id
shardingAlgorithmName: auto_order_mod
# 分布式序列策略
keyGenerateStrategy:
# 自增列名称,缺省表示不使用自增主键生成器
column: order_id
# 分布式序列算法名称
keyGeneratorName: snowflake
# 散列取模
t_auto_order_hash_mod:
actualDataSources: ds1
shardingStrategy:
standard:
shardingColumn: order_id
shardingAlgorithmName: auto_order_hash_mod
# 分布式序列策略
keyGenerateStrategy:
# 自增列名称,缺省表示不使用自增主键生成器
column: order_id
# 分布式序列算法名称
keyGeneratorName: snowflake
# 容量范围
t_auto_order_volume_range:
actualDataSources: ds$->{
1..2}
shardingStrategy:
standard:
shardingColumn: price
shardingAlgorithmName: auto_order_volume_range
# 分布式序列策略
keyGenerateStrategy:
# 自增列名称,缺省表示不使用自增主键生成器
column: order_id
# 分布式序列算法名称
keyGeneratorName: snowflake
# 边界范围
t_auto_order_boundary_range:
actualDataSources: ds$->{
1..2}
shardingStrategy:
standard:
shardingColumn: price
shardingAlgorithmName: auto_order_boundary_range
# 分布式序列策略
keyGenerateStrategy:
# 自增列名称,缺省表示不使用自增主键生成器
column: order_id
# 分布式序列算法名称
keyGeneratorName: snowflake
# 自动日期间隔
t_auto_order_auto_interval:
actualDataSources: ds$->{
1..2}
shardingStrategy:
standard:
shardingColumn: create_time
shardingAlgorithmName: auto_order_auto_interval
# 分布式序列策略
keyGenerateStrategy:
# 自增列名称,缺省表示不使用自增主键生成器
column: order_id
# 分布式序列算法名称
keyGeneratorName: snowflake
# 分片算法配置
shardingAlgorithms:
# 取模
auto_order_mod:
type: MOD
props:
sharding-count: 6
# 散列取模
auto_order_hash_mod:
type: HASH_MOD
props:
sharding-count: 6
# 容量范围
auto_order_volume_range:
type: VOLUME_RANGE
props:
range-lower: 0
range-upper: 20000
sharding-volume: 10000
# 边界范围
auto_order_boundary_range:
type: BOUNDARY_RANGE
props:
sharding-ranges: 10,15,100,12000,16000
# 自动日期间隔
auto_order_auto_interval:
type: AUTO_INTERVAL
props:
datetime-lower: "2023-05-07 00:00:00"
datetime-upper: "2023-05-10 00:00:00"
sharding-seconds: 86400
# 分布式序列算法配置(如果是自动生成的,在插入数据的sql中就不要传id,null也不行,直接插入字段中就不要有主键的字段)
keyGenerators:
# 分布式序列算法名称
snowflake:
# 分布式序列算法类型
type: SNOWFLAKE
props:
sql-show: true
4. 結論
このアップグレードにより、 と の間の構成の違いが大幅にShardingSphere-JDBC
減少し、ユーザーがクラスタ アーキテクチャにスムーズに移行するための強固な基盤が築かれ、構成の互換性の標準化。ShardingSphere-Proxy
ShardingSphere-JDBC
ShardingSphere
API
ShardingSphere
新規ユーザーにとって、ShardingSphereDriver
独自の構成方法により煩雑な構成が軽減され、簡単に開始できるようになります。