Java API

5.0.0-beta

数据分片

配置入口

类名称:org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration

可配置属性:

名称 数据类型 说明 默认值
tables (+) Collection<ShardingTableRuleConfiguration> 分片表规则列表 -
autoTables (+) Collection<ShardingAutoTableRuleConfiguration> 自动化分片表规则列表 -
bindingTableGroups (*) Collection<String> 绑定表规则列表
broadcastTables (*) Collection<String> 广播表规则列表
defaultDatabaseShardingStrategy (?) ShardingStrategyConfiguration 默认分库策略 不分片
defaultTableShardingStrategy (?) ShardingStrategyConfiguration 默认分表策略 不分片
defaultKeyGenerateStrategy (?) KeyGeneratorConfiguration 默认自增列生成器配置 雪花算法
shardingAlgorithms (+) Map<String, ShardingSphereAlgorithmConfiguration> 分片算法名称和配置
keyGenerators (?) Map<String, ShardingSphereAlgorithmConfiguration> 自增列生成算法名称和配置

分片表配置

类名称:org.apache.shardingsphere.sharding.api.config.ShardingTableRuleConfiguration

可配置属性:

名称 数据类型 说明 默认值
logicTable String 分片逻辑表名称 -
actualDataNodes (?) String 由数据源名 + 表名组成,以小数点分隔。
多个表以逗号分隔,支持行表达式
使用已知数据源与逻辑表名称生成数据节点,用于广播表或只分库不分表且所有库的表结构完全一致的情况
databaseShardingStrategy (?) ShardingStrategyConfiguration 分库策略 使用默认分库策略
tableShardingStrategy (?) ShardingStrategyConfiguration 分表策略 使用默认分表策略
keyGenerateStrategy (?) KeyGeneratorConfiguration 自增列生成器 使用默认自增主键生成器

自动分片表配置

类名称:org.apache.shardingsphere.sharding.api.config.ShardingAutoTableRuleConfiguration

可配置属性:

名称 数据类型 说明 默认值
logicTable String 分片逻辑表名称 -
actualDataSources (?) String 数据源名称,多个数据源以逗号分隔 使用全部配置的数据源
shardingStrategy (?) ShardingStrategyConfiguration 分片策略 使用默认分片策略
keyGenerateStrategy (?) KeyGeneratorConfiguration 自增列生成器 使用默认自增主键生成器

分片策略配置

标准分片策略配置

类名称:org.apache.shardingsphere.sharding.api.config.strategy.sharding.StandardShardingStrategyConfiguration

可配置属性:

名称 数据类型 说明
shardingColumn String 分片列名称
shardingAlgorithmName String 分片算法名称
复合分片策略配置

类名称:org.apache.shardingsphere.sharding.api.config.strategy.sharding.ComplexShardingStrategyConfiguration

可配置属性:

名称 数据类型 说明
shardingColumns String 分片列名称,多个列以逗号分隔
shardingAlgorithmName String 分片算法名称
Hint 分片策略配置

类名称:org.apache.shardingsphere.sharding.api.config.strategy.sharding.HintShardingStrategyConfiguration

可配置属性:

名称 数据类型 说明
shardingAlgorithmName String 分片算法名称
不分片策略配置

类名称:org.apache.shardingsphere.sharding.api.config.strategy.sharding.NoneShardingStrategyConfiguration

可配置属性:无

算法类型的详情,请参见 内置分片算法列表

分布式序列策略配置

类名称:org.apache.shardingsphere.sharding.api.config.strategy.keygen.KeyGenerateStrategyConfiguration

可配置属性:

名称 数据类型 说明
column String 分布式序列列名称
keyGeneratorName String 分布式序列算法名称

算法类型的详情,请参见 内置分布式序列算法列表

读写分离

配置入口

类名称:ReadwriteSplittingRuleConfiguration

可配置属性:

名称 数据类型 说明
dataSources (+) Collection<ReadwriteSplittingDataSourceRuleConfiguration> 读写数据源配置
loadBalancers (*) Map<String, ShardingSphereAlgorithmConfiguration> 从库负载均衡算法配置

读写分离数据源配置

类名称:ReadwriteSplittingDataSourceRuleConfiguration

可配置属性:

名称 数据类型 说明 默认值
name String 读写分离数据源名称 -
writeDataSourceName String 写库数据源名称 -
readDataSourceNames (+) Collection<String> 读库数据源名称列表 -
loadBalancerName (?) String 读库负载均衡算法名称 轮询负载均衡算法

算法类型的详情,请参见 内置负载均衡算法列表

数据加密

配置入口

类名称:org.apache.shardingsphere.encrypt.api.config.EncryptRuleConfiguration

可配置属性:

名称 数据类型 说明 默认值
tables (+) Collection<EncryptTableRuleConfiguration> 加密表规则配置
encryptors (+) Map<String, ShardingSphereAlgorithmConfiguration> 加解密算法名称和配置

加密表规则配置

类名称:org.apache.shardingsphere.encrypt.api.config.rule.EncryptTableRuleConfiguration

可配置属性:

名称 数据类型 说明
name String 表名称
columns (+) Collection<EncryptColumnRuleConfiguration> 加密列规则配置列表

加密列规则配置

类名称:org.apache.shardingsphere.encrypt.api.config.rule.EncryptColumnRuleConfiguration

可配置属性:

名称 数据类型 说明
logicColumn String 逻辑列名称
cipherColumn String 密文列名称
assistedQueryColumn (?) String 查询辅助列名称
encryptorName String 加密算法名称

加解密算法配置

类名称:org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration

可配置属性:

名称 数据类型 说明
name String 加解密算法名称
type String 加解密算法类型
properties Properties 加解密算法属性配置

算法类型的详情,请参见 内置加密算法列表

影子库

配置入口

类名称:org.apache.shardingsphere.shadow.api.config.ShadowRuleConfiguration

可配置属性:

名称 数据类型 说明
column String SQL 中的影子字段名,该值为 true 的 SQL 会路由到影子库执行
sourceDataSourceNames List<String> 生产数据库名称
shadowDataSourceNames List<String> 影子数据库名称,与上面一一对应

分布式治理

配置项说明

治理

配置入口

类名称:org.apache.shardingsphere.governance.repository.api.config.GovernanceConfiguration

可配置属性:

名称 数据类型 说明
name String 注册中心实例名称
registryCenterConfiguration RegistryCenterConfiguration 注册中心实例的配置
overwrite boolean 本地配置是否覆盖配置中心配置,如果可覆盖,每次启动都以本地配置为准

注册中心的类型可以为 Zookeeper 或 etcd。

治理实例配置

类名称:org.apache.shardingsphere.governance.repository.api.config.RegistryCenterConfiguration

可配置属性:

名称 数据类型 说明
type String 治理实例类型,如:Zookeeper, etcd
serverLists String 治理服务列表,包括 IP 地址和端口号,多个地址用逗号分隔,如: host1:2181,host2:2181
props Properties 配置本实例需要的其他参数,例如 ZooKeeper 的连接参数等
overwrite boolean 本地配置是否覆盖配置中心配置;如果覆盖,则每次启动都参考本地配置

ZooKeeper 属性配置

名称 数据类型 说明 默认值
digest (?) String 连接注册中心的权限令牌 无需验证
operationTimeoutMilliseconds (?) int 操作超时的毫秒数 500 毫秒
maxRetries (?) int 连接失败后的最大重试次数 3 次
retryIntervalMilliseconds (?) int 重试间隔毫秒数 500 毫秒
timeToLiveSeconds (?) int 临时节点存活秒数 60 秒

Etcd 属性配置

名称 数据类型 说明 默认值
timeToLiveSeconds (?) long 数据存活秒数 30 秒

ShardingSphere-4.x

数据分片

ShardingDataSourceFactory

名称 数据类型 说明
dataSourceMap Map<String, DataSource> 数据源配置
shardingRuleConfig ShardingRuleConfiguration 数据分片规则配置
props (?) Properties 属性配置

ShardingRuleConfiguration

名称 数据类型 说明
tableRuleConfigs Collection 分片规则列表
bindingTableGroups (?) Collection 绑定表规则列表
broadcastTables (?) Collection 广播表规则列表
defaultDataSourceName (?) String 未配置分片规则的表将根据默认数据源定位
defaultDatabaseShardingStrategyConfig (?) ShardingStrategyConfiguration 默认数据库分片策略
defaultTableShardingStrategyConfig (?) ShardingStrategyConfiguration 默认分表策略
defaultKeyGeneratorConfig (?) KeyGeneratorConfiguration 默认密钥生成器配置,使用用户定义的或内置的,例如 雪花/UUID。默认密钥生成器是 org.apache.shardingsphere.core.keygen.generator.impl.SnowflakeKeyGenerator
masterSlaveRuleConfigs (?) Collection 读写分离规则,默认值表示不使用读写分离

TableRuleConfiguration

名称 数据类型 说明
logicTable String 逻辑表名称
actualDataNodes (?) String 描述数据源名称和实际表,分隔符为点,多个数据节点用逗号分割,支持内联表达式。不存在意味着仅分片数据库。示例:ds${0..7}.tbl${0..7}
databaseShardingStrategyConfig (?) ShardingStrategyConfiguration 数据库分片策略,如果不存在则使用默认的数据库分片策略
tableShardingStrategyConfig (?) ShardingStrategyConfiguration 表分片策略,如果不存在则使用默认的数据库分片策略
keyGeneratorConfig (?) KeyGeneratorConfiguration 主键生成器配置,如果不存在则使用默认主键生成器
encryptorConfiguration (?) EncryptorConfiguration 加密生成器配置

StandardShardingStrategyConfiguration

ShardingStrategyConfiguration 的实现类

名称 数据类型 说明
shardingColumn String 分片键
preciseShardingAlgorithm PreciseShardingAlgorithm =IN 中使用的精确分片算法
rangeShardingAlgorithm (?) RangeShardingAlgorithm BETWEEN 中使用的范围分片算法

ComplexShardingStrategyConfiguration

ShardingStrategyConfiguration 的实现类,用于具有多个分片键的复杂分片情况。

名称 数据类型 说明
shardingColumns String 分片键,以逗号分隔
shardingAlgorithm ComplexKeysShardingAlgorithm 复杂分片算法

InlineShardingStrategyConfiguration

ShardingStrategyConfiguration 的实现类,用于行表达式的分片策略。

名称 数据类型 说明
shardingColumns String 分片列名,以逗号分隔
algorithmExpression String 行表达式的分片策略,应符合 groovy 语法;有关更多详细信息,请参阅行表达式

HintShardingStrategyConfiguration

ShardingStrategyConfiguration 的实现类,用于配置强制分片策略。

名称 数据类型 说明
shardingAlgorithm HintShardingAlgorithm 强制分片算法
NoneShardingStrategyConfiguration

ShardingStrategyConfiguration 的实现类,用于配置非分片策略。

自增主键生成器

名称 数据类型 说明
column String 主键
type String 主键生成器的类型,使用用户定义的或内置的,例如 雪花,UUID
props Properties 主键生成器的属性配置

属性配置

属性配置项,可以是以下属性。

SNOWFLAKE

名称 数据类型 说明
max.tolerate.time.difference.milliseconds (?) long 最大容忍时钟回退时间,单位:毫秒。默认为 10 毫秒
max.vibration.offset (?) int 最大抖动上限值,范围 [0, 4096),默认为 1。
注:若使用此算法生成值作分片值,建议配置此属性。
此算法在不同毫秒内所生成的 key 取模 2^n (2^n 一般为分库或分表数) 之后结果总为 0 或 1。
为防止上述分片问题,建议将此属性值配置为 (2^n)-1

读写分离

MasterSlaveDataSourceFactory

名称 数据类型 说明
dataSourceMap Map<String, DataSource> 数据源及其名称的映射
masterSlaveRuleConfig MasterSlaveRuleConfiguration 读写分离规则配置
props (?) Properties 属性配置

MasterSlaveRuleConfiguration

名称 数据类型 说明
name String 读写分离数据源名称
masterDataSourceName String 主数据库源名称
slaveDataSourceNames Collection 从数据库源名称列表
loadBalanceAlgorithm (?) MasterSlaveLoadBalanceAlgorithm 从库负载均衡算法

属性配置

属性配置项,可以是以下属性。

名称 数据类型 说明
sql.show (?) boolean 是否打印 SQL 日志,默认值:false
executor.size (?) int 用于 SQL 实现的工作线程号;如果为 0,则没有限制。默认值:0
max.connections.size.per.query (?) int 每个物理数据库每次查询分配的最大连接数,默认值:1
check.table.metadata.enabled (?) boolean 初始化时是否检查元数据的一致性,默认值:false

数据脱敏

EncryptDataSourceFactory

名称 数据类型 说明
dataSource DataSource 数据源
encryptRuleConfig EncryptRuleConfiguration 加密规则配置
props (?) Properties 属性配置

EncryptRuleConfiguration

名称 数据类型 说明
encryptors Map<String, EncryptorRuleConfiguration> 加密器名称和加密器
tables Map<String, EncryptTableRuleConfiguration> 加密表名和加密表

属性配置

属性配置项,可以是以下属性。

名称 数据类型 说明
sql.show (?) boolean 是否打印 SQL 日志,默认值:false
query.with.cipher.column (?) boolean 有普通列时,是否使用加密列查询,默认值:true

编排

OrchestrationShardingDataSourceFactory

名称 数据类型 说明
dataSourceMap Map<String, DataSource> ShardingDataSourceFactory 相同
shardingRuleConfig ShardingRuleConfiguration ShardingDataSourceFactory 相同
props (?) Properties ShardingDataSourceFactory 相同
orchestrationConfig OrchestrationConfiguration 编排规则配置

OrchestrationMasterSlaveDataSourceFactory

名称 数据类型 说明
dataSourceMap Map<String, DataSource> MasterSlaveDataSourceFactory 相同
masterSlaveRuleConfig MasterSlaveRuleConfiguration MasterSlaveDataSourceFactory 相同
configMap (?) Map<String, Object> MasterSlaveDataSourceFactory 相同
props (?) Properties MasterSlaveDataSourceFactory 相同
orchestrationConfig OrchestrationConfiguration 编排规则配置

OrchestrationEncryptDataSourceFactory

名称 数据类型 说明
dataSource DataSource EncryptDataSourceFactory 相同
encryptRuleConfig EncryptRuleConfiguration EncryptDataSourceFactory 相同
props (?) Properties EncryptDataSourceFactory 相同
orchestrationConfig OrchestrationConfiguration 编排规则配置

OrchestrationConfiguration

名称 数据类型 说明
instanceConfigurationMap Map<String, CenterConfiguration> config-center&registry-center 的配置,key 是 center 的名称,value 是 config-center/registry-center

CenterConfiguration

名称 数据类型 说明
type String 注册中心类型 (zookeeper/etcd/apollo/nacos)
properties String 注册中心的配置属性,例如zookeeper的配置属性
orchestrationType String 编排中心的类型:config-center 或 registry-center,如果两者都使用 setOrchestrationType("registry_center,config_center");
serverLists String 注册中心服务列表,包括 IP 地址和端口号,多个地址用逗号分隔,如: host1:2181,host2:2181
namespace (?) String 命名空间

属性配置

属性配置项,可以是以下属性。

名称 数据类型 说明
overwrite boolean 本地配置是否覆盖配置中心配置; 如果覆盖,则每次启动都参考本地配置

如果注册中心类型是 zookeeper,则可以使用以下选项设置属性:

名称 数据类型 说明
digest (?) String 连接注册中心的权限令牌;默认表示不需要权限
operationTimeoutMilliseconds (?) int 操作超时毫秒数,默认为 500 毫秒
maxRetries (?) int 最大重试次数,默认为 3 次
retryIntervalMilliseconds (?) int 重试间隔毫秒数,默认为 500 毫秒
timeToLiveSeconds (?) int 临时节点的存活时间,默认 60 秒

如果注册中心类型是 etcd,则可以使用以下选项设置属性:

名称 数据类型 说明
timeToLiveSeconds (?) long etcd TTL 秒,默认为 30 秒

如果注册中心类型是 apollo,则可以使用以下选项设置属性:

名称 数据类型 说明
appId (?) String Apollo appId,默认为 APOLLO_SHADINGSPHERE
env (?) String Apollo env,默认为 DEV
clusterName (?) String Apollo clusterName,默认为 default
administrator (?) String Apollo administrator,默认为 `` |
token (?) String Apollo token,默认为 `` |
portalUrl (?) String Apollo portalUrl,默认为 `` |
connectTimeout (?) int Apollo connectTimeout,默认为 1000 毫秒
readTimeout (?) int Apollo readTimeout,默认为 5000 毫秒

如果注册中心类型是 nacos,则可以使用以下选项设置属性:

名称 数据类型 说明
group (?) String Nacos 组,默认为 SHADING_SPHERE_DEFAULT_GROUP
timeout (?) long Nacos 超时时间,默认为 3000 毫秒

ShardingSphere-3.x

数据分片

ShardingDataSourceFactory

名称 数据类型 说明
dataSourceMap Map<String, DataSource> 数据源配置
shardingRuleConfig ShardingRuleConfiguration 数据分片规则配置
configMap (?) Map<String, Object> 用户自定义的参数
props (?) Properties 属性配置

ShardingRuleConfiguration

名称 数据类型 说明
tableRuleConfigs Collection 分片规则列表
bindingTableGroups (?) Collection 绑定表规则列表
broadcastTables (?) Collection 广播表规则列表
defaultDataSourceName (?) String 未配置分片规则的表将根据默认数据源定位
defaultDatabaseShardingStrategyConfig (?) ShardingStrategyConfiguration 默认数据库分片策略
defaultTableShardingStrategyConfig (?) ShardingStrategyConfiguration 默认分表策略
defaultKeyGeneratorConfig (?) KeyGeneratorConfiguration 默认密钥生成器配置,使用用户定义的或内置的,例如 雪花/UUID。默认密钥生成器是 org.apache.shardingsphere.core.keygen.generator.impl.SnowflakeKeyGenerator
masterSlaveRuleConfigs (?) Collection 读写分离规则,默认值表示不使用读写分离

TableRuleConfiguration

名称 数据类型 说明
logicTable String 逻辑表名称
actualDataNodes (?) String 描述数据源名称和实际表,分隔符为点,多个数据节点用逗号分割,支持内联表达式。不存在意味着仅分片数据库。示例:ds${0..7}.tbl${0..7}
databaseShardingStrategyConfig (?) ShardingStrategyConfiguration 数据库分片策略,如果不存在则使用默认的数据库分片策略
tableShardingStrategyConfig (?) ShardingStrategyConfiguration 表分片策略,如果不存在则使用默认的数据库分片策略
logicIndex (?) String 逻辑索引,如果在 Oracle/PostgreSQL 中使用 DROP INDEX XXX SQL,则需要设置此属性以查找实际表
keyGeneratorConfig (?) String 主键列配置,如果不存在则使用默认主键列
keyGenerator (?) KeyGenerator 主键生成器配置,如果不存在则使用默认主键生成器

StandardShardingStrategyConfiguration

ShardingStrategyConfiguration 的实现类

名称 数据类型 说明
shardingColumn String 分片键
preciseShardingAlgorithm PreciseShardingAlgorithm =IN 中使用的精确分片算法
rangeShardingAlgorithm (?) RangeShardingAlgorithm BETWEEN 中使用的范围分片算法
ComplexShardingStrategyConfiguration

ShardingStrategyConfiguration 的实现类,用于具有多个分片键的复杂分片策略。

名称 数据类型 说明
shardingColumns String 分片键,以逗号分隔
shardingAlgorithm ComplexKeysShardingAlgorithm 复杂分片算法
InlineShardingStrategyConfiguration

ShardingStrategyConfiguration 的实现类,用于行表达式的分片策略。

名称 数据类型 说明
shardingColumns String 分片列名,以逗号分隔
algorithmExpression String 行表达式的分片策略,应符合 groovy 语法;有关更多详细信息,请参阅行表达式
HintShardingStrategyConfiguration

ShardingStrategyConfiguration 的实现类,用于配置强制分片策略。

名称 数据类型 说明
shardingAlgorithm HintShardingAlgorithm 强制分片算法
NoneShardingStrategyConfiguration

ShardingStrategyConfiguration 的实现类,用于配置非分片策略。

属性配置

枚举属性

名称 数据类型 说明
sql.show (?) boolean 是否打印 SQL 日志,默认值:false
executor.size (?) int 用于 SQL 实现的工作线程号;如果为 0,则没有限制。默认值:0
max.connections.size.per.query (?) int 每个物理数据库每次查询分配的最大连接数,默认值:1
check.table.metadata.enabled (?) boolean 初始化时是否检查元数据的一致性,默认值:false

configMap

用户定义的参数。

读写分离

MasterSlaveDataSourceFactory

名称 数据类型 说明
dataSourceMap Map<String, DataSource> 数据源及其名称的映射
masterSlaveRuleConfig MasterSlaveRuleConfiguration 读写分离规则配置
configMap (?) Map<String, Object> 用户自定义的参数
props (?) Properties 属性配置

MasterSlaveRuleConfiguration

名称 数据类型 说明
name String 读写分离数据源名称
masterDataSourceName String 主数据库源名称
slaveDataSourceNames Collection 从数据库源名称列表
loadBalanceAlgorithm (?) MasterSlaveLoadBalanceAlgorithm 从库负载均衡算法

configMap

用户定义的参数。

PropertiesConstant

枚举属性。

名称 数据类型 说明
sql.show (?) boolean 是否打印 SQL 日志,默认值:false
executor.size (?) int 用于 SQL 实现的工作线程号;如果为 0,则没有限制。默认值:0
max.connections.size.per.query (?) int 每个物理数据库每次查询分配的最大连接数,默认值:1
check.table.metadata.enabled (?) boolean 初始化时是否检查元数据的一致性,默认值:false

编排

OrchestrationShardingDataSourceFactory

名称 数据类型 说明
dataSourceMap Map<String, DataSource> ShardingDataSourceFactory 相同
shardingRuleConfig ShardingRuleConfiguration ShardingDataSourceFactory 相同
configMap (?) Map<String, Object> ShardingDataSourceFactory 相同
props (?) Properties ShardingDataSourceFactory 相同
orchestrationConfig OrchestrationConfiguration 编排规则配置

OrchestrationMasterSlaveDataSourceFactory

名称 数据类型 说明
dataSourceMap Map<String, DataSource> MasterSlaveDataSourceFactory 相同
masterSlaveRuleConfig MasterSlaveRuleConfiguration MasterSlaveDataSourceFactory 相同
configMap (?) Map<String, Object> MasterSlaveDataSourceFactory 相同
props (?) Properties MasterSlaveDataSourceFactory 相同
orchestrationConfig OrchestrationConfiguration 编排规则配置

OrchestrationConfiguration

名称 数据类型 说明
name String 编排实例名称
overwrite boolean 本地配置是否覆盖配置中心配置; 如果覆盖,则每次启动都参考本地配置
regCenterConfig RegistryCenterConfiguration 注册中心配置

RegistryCenterConfiguration

名称 数据类型 说明
serverLists String 注册中心服务列表,包括 IP 地址和端口号,多个地址用逗号分隔,如: host1:2181,host2:2181
namespace (?) String 命名空间
digest (?) String 连接注册中心的权限令牌;默认表示不需要权限
operationTimeoutMilliseconds (?) int 操作超时毫秒数,默认为 500 毫秒
maxRetries (?) int 最大重试次数,默认为 3 次
retryIntervalMilliseconds (?) int 重试间隔毫秒数,默认为 500 毫秒
timeToLiveSeconds (?) int 临时节点的存活时间,默认 60 秒

ShardingSphere-2.x

读写分离

概念

为了缓解数据库压力,将写入和读取操作分离为不同数据源,写库称为主库,读库称为从库,一主库可配置多从库。

支持项

  1. 提供了一主多从的读写分离配置,可独立使用,也可配合分库分表使用。
  2. 独立使用读写分离支持 SQL 透传。
  3. 同一线程且同一数据库连接内,如有写入操作,以后的读操作均从主库读取,用于保证数据一致性。
  4. Spring 命名空间。
  5. 基于 Hint 的强制主库路由。

不支持项

  1. 主库和从库的数据同步。
  2. 主库和从库的数据同步延迟导致的数据不一致。
  3. 主库双写或多写。

代码开发示例

读写分离
// 构造一个读写分离数据源,读写分离数据源实现了 DataSource 接口,可以直接作为数据源进行处理。 masterDataSource、slaveDataSource0、slaveDataSource1 等都是使用 DBCP 等连接池配置的真实数据源。
Map<String, DataSource> dataSourceMap = new HashMap<>();
dataSourceMap.put("masterDataSource", masterDataSource);
dataSourceMap.put("slaveDataSource0", slaveDataSource0);
dataSourceMap.put("slaveDataSource1", slaveDataSource1);

// 构建读写分离配置
MasterSlaveRuleConfiguration masterSlaveRuleConfig = new MasterSlaveRuleConfiguration();
masterSlaveRuleConfig.setName("ms_ds");
masterSlaveRuleConfig.setMasterDataSourceName("masterDataSource");
masterSlaveRuleConfig.getSlaveDataSourceNames().add("slaveDataSource0");
masterSlaveRuleConfig.getSlaveDataSourceNames().add("slaveDataSource1");

DataSource dataSource = MasterSlaveDataSourceFactory.createDataSource(dataSourceMap, masterSlaveRuleConfig);
分库分表 + 读写分离
// 构造一个读写分离数据源,读写分离数据源实现了 DataSource 接口,可以直接作为数据源进行处理。 masterDataSource、slaveDataSource0、slaveDataSource1 等都是使用 DBCP 等连接池配置的真实数据源。
Map<String, DataSource> dataSourceMap = new HashMap<>();
dataSourceMap.put("masterDataSource0", masterDataSource0);
dataSourceMap.put("slaveDataSource00", slaveDataSource00);
dataSourceMap.put("slaveDataSource01", slaveDataSource01);

dataSourceMap.put("masterDataSource1", masterDataSource1);
dataSourceMap.put("slaveDataSource10", slaveDataSource10);
dataSourceMap.put("slaveDataSource11", slaveDataSource11);

// 构建读写分离配置
MasterSlaveRuleConfiguration masterSlaveRuleConfig0 = new MasterSlaveRuleConfiguration();
masterSlaveRuleConfig0.setName("ds_0");
masterSlaveRuleConfig0.setMasterDataSourceName("masterDataSource0");
masterSlaveRuleConfig0.getSlaveDataSourceNames().add("slaveDataSource00");
masterSlaveRuleConfig0.getSlaveDataSourceNames().add("slaveDataSource01");

MasterSlaveRuleConfiguration masterSlaveRuleConfig1 = new MasterSlaveRuleConfiguration();
masterSlaveRuleConfig1.setName("ds_1");
masterSlaveRuleConfig1.setMasterDataSourceName("masterDataSource1");
masterSlaveRuleConfig1.getSlaveDataSourceNames().add("slaveDataSource10");
masterSlaveRuleConfig1.getSlaveDataSourceNames().add("slaveDataSource11");

// 继续通过 ShardingSlaveDataSourceFactory 创建 ShardingDataSource
ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
shardingRuleConfig.getMasterSlaveRuleConfigs().add(masterSlaveRuleConfig0);
shardingRuleConfig.getMasterSlaveRuleConfigs().add(masterSlaveRuleConfig1);

DataSource dataSource = ShardingDataSourceFactory.createDataSource(dataSourceMap, shardingRuleConfig);

ShardingSphere-1.x

读写分离

概念

为了缓解数据库压力,将写入和读取操作分离为不同数据源,写库称为主库,读库称为从库,一主库可配置多从库。

支持项

  1. 提供了一主多从的读写分离配置,可独立使用,也可配合分库分表使用。
  2. 同一线程且同一数据库连接内,如有写入操作,以后的读操作均从主库读取,用于保证数据一致性。
  3. Spring 命名空间。
  4. 基于 Hint 的强制主库路由。

不支持项

  1. 主库和从库的数据同步。
  2. 主库和从库的数据同步延迟导致的数据不一致。
  3. 主库双写或多写。

代码开发示例

// 构造一个读写分离数据源,读写分离数据源实现了 DataSource 接口,可以直接作为数据源进行处理。 masterDataSource、slaveDataSource0、slaveDataSource1 等都是使用 DBCP 等连接池配置的真实数据源。
Map<String, DataSource> slaveDataSourceMap0 = new HashMap<>();
slaveDataSourceMap0.put("slaveDataSource00", slaveDataSource00);
slaveDataSourceMap0.put("slaveDataSource01", slaveDataSource01);
// You can choose the master-slave library load balancing strategy, the default is ROUND_ROBIN, and there is RANDOM to choose from, or customize the load strategy
DataSource masterSlaveDs0 = MasterSlaveDataSourceFactory.createDataSource("ms_0", "masterDataSource0", masterDataSource0, slaveDataSourceMap0, MasterSlaveLoadBalanceStrategyType.ROUND_ROBIN);

Map<String, DataSource> slaveDataSourceMap1 = new HashMap<>();
slaveDataSourceMap1.put("slaveDataSource10", slaveDataSource10);
slaveDataSourceMap1.put("slaveDataSource11", slaveDataSource11);
DataSource masterSlaveDs1 = MasterSlaveDataSourceFactory.createDataSource("ms_1", "masterDataSource1", masterDataSource1, slaveDataSourceMap1, MasterSlaveLoadBalanceStrategyType.ROUND_ROBIN);

// 构建读写分离配置
Map<String, DataSource> dataSourceMap = new HashMap<>();
dataSourceMap.put("ms_0", masterSlaveDs0);
dataSourceMap.put("ms_1", masterSlaveDs1);