默默学Sharding-Sphere(三)

接上篇,使用文档。

使用文档

数据分片

不使用Spring

引入Maven依赖

io.shardingspheresharding-jdbc-core${sharding-sphere.version}

基于Java编码的规则配置

Sharding-JDBC的分库分表通过规则配置描述,以下例子是根据user_id取模分库, 且根据order_id取模分表的两库两表的配置。

// 配置真实数据源
Map dataSourceMap = new HashMap<>();// 配置第一个数据源
BasicDataSource dataSource1 = new BasicDataSource();
dataSource1.setDriverClassName("com.mysql.jdbc.Driver");
dataSource1.setUrl("jdbc:mysql://localhost:3306/ds0");
dataSource1.setUsername("root");
dataSource1.setPassword("");
dataSourceMap.put("ds0", dataSource1);// 配置第二个数据源
BasicDataSource dataSource2 = new BasicDataSource();
dataSource2.setDriverClassName("com.mysql.jdbc.Driver");
dataSource2.setUrl("jdbc:mysql://localhost:3306/ds1");
dataSource2.setUsername("root");
dataSource2.setPassword("");
dataSourceMap.put("ds1", dataSource2);// 配置Order表规则
TableRuleConfiguration orderTableRuleConfig = new TableRuleConfiguration();
orderTableRuleConfig.setLogicTable("t_order");
orderTableRuleConfig.setActualDataNodes("ds${0..1}.t_order${0..1}");// 配置分库 + 分表策略
orderTableRuleConfig.setDatabaseShardingStrategyConfig(new InlineShardingStrategyConfiguration("user_id", "ds${user_id % 2}"));
orderTableRuleConfig.setTableShardingStrategyConfig(new InlineShardingStrategyConfiguration("order_id", "t_order${order_id % 2}"));// 配置分片规则
ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
shardingRuleConfig.getTableRuleConfigs().add(orderTableRuleConfig);// 省略配置order_item表规则...
// ...// 获取数据源对象
DataSource dataSource = ShardingDataSourceFactory.createDataSource(dataSourceMap, shardingRuleConfig, new ConcurrentHashMap(), new Properties());

基于Yaml的规则配置

或通过Yaml方式配置,与以上配置等价:

dataSources:ds0: !!org.apache.commons.dbcp.BasicDataSourcedriverClassName: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/ds0username: rootpassword: ds1: !!org.apache.commons.dbcp.BasicDataSourcedriverClassName: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/ds1username: rootpassword: tables:t_order: actualDataNodes: ds${0..1}.t_order${0..1}databaseStrategy: inline:shardingColumn: user_idalgorithmInlineExpression: ds${user_id % 2}tableStrategy: inline:shardingColumn: order_idalgorithmInlineExpression: t_order${order_id % 2}t_order_item: actualDataNodes: ds${0..1}.t_order_item${0..1}databaseStrategy: inline:shardingColumn: user_idalgorithmInlineExpression: ds${user_id % 2}tableStrategy: inline:shardingColumn: order_idalgorithmInlineExpression: t_order_item${order_id % 2}DataSource dataSource = YamlShardingDataSourceFactory.createDataSource(yamlFile);

使用原生JDBC

通过ShardingDataSourceFactory或者YamlShardingDataSourceFactory工厂和规则配置对象获取ShardingDataSource,ShardingDataSource实现自JDBC的标准接口DataSource。然后可通过DataSource选择使用原生JDBC开发,或者使用JPA, MyBatis等ORM工具。 以JDBC原生实现为例:

DataSource dataSource = YamlShardingDataSourceFactory.createDataSource(yamlFile);
String sql = "SELECT i.* FROM t_order o JOIN t_order_item i ON o.order_id=i.order_id WHERE o.user_id=? AND o.order_id=?";
try (Connection conn = dataSource.getConnection();PreparedStatement preparedStatement = conn.prepareStatement(sql)) {preparedStatement.setInt(1, 10);preparedStatement.setInt(2, 1001);try (ResultSet rs = preparedStatement.executeQuery()) {while(rs.next()) {System.out.println(rs.getInt(1));System.out.println(rs.getInt(2));}}
}

使用Spring

引入Maven依赖


io.shardingspheresharding-jdbc-spring-boot-starter${sharding-sphere.version}

io.shardingspheresharding-jdbc-spring-namespace${sharding-sphere.version}

基于Spring boot的规则配置

sharding.jdbc.datasource.names=ds0,ds1sharding.jdbc.datasource.ds0.type=org.apache.commons.dbcp2.BasicDataSource
sharding.jdbc.datasource.ds0.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds0.url=jdbc:mysql://localhost:3306/ds0
sharding.jdbc.datasource.ds0.username=root
sharding.jdbc.datasource.ds0.password=sharding.jdbc.datasource.ds1.type=org.apache.commons.dbcp2.BasicDataSource
sharding.jdbc.datasource.ds1.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds1.url=jdbc:mysql://localhost:3306/ds1
sharding.jdbc.datasource.ds1.username=root
sharding.jdbc.datasource.ds1.password=sharding.jdbc.config.sharding.default-database-strategy.inline.sharding-column=user_id
sharding.jdbc.config.sharding.default-database-strategy.inline.algorithm-expression=ds$->{user_id % 2}sharding.jdbc.config.sharding.tables.t-order.actual-data-nodes=ds$->{0..1}.t_order$->{0..1}
sharding.jdbc.config.sharding.tables.t-order.table-strategy.inline.sharding-column=order_id
sharding.jdbc.config.sharding.tables.t-order.table-strategy.inline.algorithm-expression=t_order$->{order_id % 2}sharding.jdbc.config.sharding.tables.t-order-item.actual-data-nodes=ds$->{0..1}.t_order_item$->{0..1}
sharding.jdbc.config.sharding.tables.t-order-item.table-strategy.inline.sharding-column=order_id
sharding.jdbc.config.sharding.tables.t-order-item.table-strategy.inline.algorithm-expression=t_order_item$->{order_id % 2}

基于Spring命名空间的规则配置




在Spring中使用DataSource

直接通过注入的方式即可使用DataSource,或者将DataSource配置在JPA、Hibernate或MyBatis中使用。
@Resource
private DataSource dataSource;

读写分离

不使用Spring

引入Maven依赖

io.shardingspheresharding-jdbc-core${sharding-sphere.version}

基于Java编码的规则配置

// 配置真实数据源
Map dataSourceMap = new HashMap<>();// 配置主库
BasicDataSource masterDataSource = new BasicDataSource();
masterDataSource.setDriverClassName("com.mysql.jdbc.Driver");
masterDataSource.setUrl("jdbc:mysql://localhost:3306/ds_master");
masterDataSource.setUsername("root");
masterDataSource.setPassword("");
dataSourceMap.put("ds_master", masterDataSource);// 配置第一个从库
BasicDataSource slaveDataSource1 = new BasicDataSource();
slaveDataSource1.setDriverClassName("com.mysql.jdbc.Driver");
slaveDataSource1.setUrl("jdbc:mysql://localhost:3306/ds_slave0");
slaveDataSource1.setUsername("root");
slaveDataSource1.setPassword("");
dataSourceMap.put("ds_slave0", slaveDataSource1);// 配置第二个从库
BasicDataSource slaveDataSource2 = new BasicDataSource();
slaveDataSource2.setDriverClassName("com.mysql.jdbc.Driver");
slaveDataSource2.setUrl("jdbc:mysql://localhost:3306/ds_slave1");
slaveDataSource2.setUsername("root");
slaveDataSource2.setPassword("");
dataSourceMap.put("ds_slave1", slaveDataSource2);// 配置读写分离规则
MasterSlaveRuleConfiguration masterSlaveRuleConfig = new MasterSlaveRuleConfiguration("ds_master_slave", "ds_master", Arrays.asList("ds_slave0", "ds_slave1"));// 获取数据源对象
DataSource dataSource = MasterSlaveDataSourceFactory.createDataSource(createDataSourceMap(), masterSlaveRuleConfig, new HashMap(), new Properties());

基于Yaml的规则配置

或通过Yaml方式配置,与以上配置等价:

dataSources:ds_master: !!org.apache.commons.dbcp.BasicDataSourcedriverClassName: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/ds_masterusername: rootpassword: ds_slave0: !!org.apache.commons.dbcp.BasicDataSourcedriverClassName: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/ds_slave0username: rootpassword:ds_slave1: !!org.apache.commons.dbcp.BasicDataSourcedriverClassName: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/ds_slave1username: rootpassword: masterSlaveRule:name: ds_msmasterDataSourceName: ds_masterslaveDataSourceNames: [ds_slave0, ds_slave1]props:sql.show: trueconfigMap:key1: value1DataSource dataSource = MasterSlaveDataSourceFactory.createDataSource(yamlFile);

使用原生JDBC

通过MasterSlaveDataSourceFactory工厂和规则配置对象获取MasterSlaveDataSource,MasterSlaveDataSource实现自JDBC的标准接口DataSource。然后可通过DataSource选择使用原生JDBC开发,或者使用JPA, MyBatis等ORM工具。 以JDBC原生实现为例:

DataSource dataSource = MasterSlaveDataSourceFactory.createDataSource(yamlFile);
String sql = "SELECT i.* FROM t_order o JOIN t_order_item i ON o.order_id=i.order_id WHERE o.user_id=? AND o.order_id=?";
try (Connection conn = dataSource.getConnection();PreparedStatement preparedStatement = conn.prepareStatement(sql)) {preparedStatement.setInt(1, 10);preparedStatement.setInt(2, 1001);try (ResultSet rs = preparedStatement.executeQuery()) {while(rs.next()) {System.out.println(rs.getInt(1));System.out.println(rs.getInt(2));}}
}

使用Spring

引入Maven依赖


io.shardingspheresharding-jdbc-spring-boot-starter${sharding-sphere.version}

io.shardingspheresharding-jdbc-spring-namespace${sharding-sphere.version}

 

基于Spring boot的规则配置

sharding.jdbc.datasource.names=master,slave0,slave1sharding.jdbc.datasource.master.type=org.apache.commons.dbcp.BasicDataSource
sharding.jdbc.datasource.master.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.master.url=jdbc:mysql://localhost:3306/master
sharding.jdbc.datasource.master.username=root
sharding.jdbc.datasource.master.password=sharding.jdbc.datasource.slave0.type=org.apache.commons.dbcp.BasicDataSource
sharding.jdbc.datasource.slave0.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.slave0.url=jdbc:mysql://localhost:3306/slave0
sharding.jdbc.datasource.slave0.username=root
sharding.jdbc.datasource.slave0.password=sharding.jdbc.datasource.slave1.type=org.apache.commons.dbcp.BasicDataSource
sharding.jdbc.datasource.slave1.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.slave1.url=jdbc:mysql://localhost:3306/slave1
sharding.jdbc.datasource.slave1.username=root
sharding.jdbc.datasource.slave1.password=sharding.jdbc.config.masterslave.name=ms
sharding.jdbc.config.masterslave.master-data-source-name=master
sharding.jdbc.config.masterslave.slave-data-source-names=slave0,slave1sharding.jdbc.config.masterslave.props.sql.show=true

基于Spring命名空间的规则配置


${sql_show}10bar

在Spring中使用DataSource

直接通过注入的方式即可使用DataSource,或者将DataSource配置在JPA、Hibernate或MyBatis中使用。
@Resource
private DataSource dataSource;

强制路由

简介

Sharding-Sphere使用ThreadLocal管理分片键值进行Hint强制路由。可以通过编程的方式向HintManager中添加分片条件,该分片条件仅在当前线程内生效。 方式主要使用场景:
1.分片字段不存在SQL中、数据库表结构中,而存在于外部业务逻辑。因此,通过Hint实现外部指定分片结果进行数据操作。
2.强制在主库进行某些数据操作。

基于暗示(Hint)的数据分片

配置

使用hint进行强制数据分片,需要使用HintManager搭配分片策略配置共同使用。若DatabaseShardingStrategy配置了Hint分片算法,则可使用HintManager进行分库路由结果的注入。同理,若TableShardingStrategy配置了Hint分片算法,则同样可 使用HintManager进行分表路由结果的注入。所以使用Hint之前,需要配置Hint分片算法。
参考代码如下:

shardingRule:tables:t_order:actualDataNodes: demo_ds_${0..1}.t_order_${0..1}databaseStrategy:hint:algorithmClassName: io.shardingsphere.userAlgo.HintAlgorithmtableStrategy:hint:algorithmClassName: io.shardingsphere.userAlgo.HintAlgorithmdefaultDatabaseStrategy:inline:shardingColumn: user_idalgorithmExpression: demo_ds_${user_id % 2}defaultTableStrategy:none:defaultKeyGeneratorClassName: io.shardingsphere.core.keygen.DefaultKeyGeneratorprops:sql.show: true

实例化

HintManager hintManager = HintManager.getInstance();

添加分片键值

● 使用hintManager.addDatabaseShardingValue来添加数据源分片键值。
● 使用hintManager.addTableShardingValue来添加表分片键值。
分库不分表情况下,强制路由至某一个分库时,可使用hintManager.setDatabaseShardingValue方式添加分片。通过此方式添加分片键值后,将跳过SQL解析和改写阶段,从而提高整体执行效率。

清除分片键值

分片键值保存在ThreadLocal中,所以需要在操作结束时调用hintManager.close()来清除ThreadLocal中的内容。
hintManager实现了AutoCloseable接口,可推荐使用try with resource自动关闭。

完整代码示例

// Sharding database and table with using hintManager.String sql = "SELECT * FROM t_order";try (HintManager hintManager = HintManager.getInstance();Connection conn = dataSource.getConnection();PreparedStatement preparedStatement = conn.prepareStatement(sql)) {hintManager.addDatabaseShardingValue("t_order", 1);hintManager.addTableShardingValue("t_order", 2);try (ResultSet rs = preparedStatement.executeQuery()) {while (rs.next()) {// ...}}}// Sharding database without sharding table and routing to only one database with using hintManger.String sql = "SELECT * FROM t_order";try (HintManager hintManager = HintManager.getInstance();Connection conn = dataSource.getConnection();PreparedStatement preparedStatement = conn.prepareStatement(sql)) {hintManager.setDatabaseShardingValue(3);try (ResultSet rs = preparedStatement.executeQuery()) {while (rs.next()) {// ...}}}

基于暗示(Hint)的强制主库路由

实例化

与基于暗示(Hint)的数据分片相同。

设置主库路由

● 使用hintManager.setMasterRouteOnly设置主库路由。

清除分片键值

与基于暗示(Hint)的数据分片相同。

完整代码示例

String sql = "SELECT * FROM t_order";
try (HintManager hintManager = HintManager.getInstance();Connection conn = dataSource.getConnection();PreparedStatement preparedStatement = conn.prepareStatement(sql)) {hintManager.setMasterRouteOnly();try (ResultSet rs = preparedStatement.executeQuery()) {while (rs.next()) {// ...}}
}

数据治理

使用数据治理功能需要指定一个注册中心。配置将全部存入注册中心,可以在每次启动时使用本地配置覆盖注册中心配置,也可以只通过注册中心读取配置。

不使用Spring

引入Maven依赖

io.shardingspheresharding-jdbc-orchestration${sharding-sphere.version}

io.shardingspheresharding-orchestration-reg-zookeeper-curator

io.shardingspheresharding-orchestration-reg-etcd

基于Java编码的规则配置

// 省略配置dataSourceMap以及shardingRuleConfig
// ...// 配置注册中心
RegistryCenterConfiguration regConfig = new RegistryCenterConfiguration();
regConfig.setServerLists("localhost:2181");
regConfig.setNamespace("sharding-sphere-orchestration");// 配置数据治理
OrchestrationConfiguration orchConfig = new OrchestrationConfiguration("orchestration-sharding-data-source", regConfig, false);// 获取数据源对象
DataSource dataSource = OrchestrationShardingDataSourceFactory.createDataSource(dataSourceMap, shardingRuleConfig, new ConcurrentHashMap(), new Properties(), orchConfig);

基于Yaml的规则配置

或通过Yaml方式配置,与以上配置等价:

orchestration:name: orchestration-sharding-data-sourceoverwrite: falseregistry:serverLists: localhost:2181namespace: sharding-sphere-orchestrationDataSource dataSource = YamlOrchestrationShardingDataSourceFactory.createDataSource(yamlFile);

使用Spring

引入Maven依赖


io.shardingspheresharding-jdbc-orchestration-spring-boot-starter${sharding-sphere.version}

io.shardingspheresharding-orchestration-reg-zookeeper-curator${sharding-sphere.version}

io.shardingspheresharding-orchestration-reg-etcd${sharding-sphere.version}

io.shardingspheresharding-jdbc-orchestration-spring-namespace${sharding-sphere.version}

io.shardingspheresharding-orchestration-reg-zookeeper-curator${sharding-sphere.version}

io.shardingspheresharding-orchestration-reg-etcd${sharding-sphere.version}

基于Spring boot的规则配置

sharding.jdbc.config.orchestration.name=orchestration-sharding-data-source
sharding.jdbc.config.orchestration.overwrite=false
sharding.jdbc.config.orchestration.registry.server-lists=localhost:2181
sharding.jdbc.config.orchestration.registry.namespace=sharding-jdbc-orchestration

基于Spring命名空间的规则配置




Java配置

配置示例

数据分片

 DataSource getShardingDataSource() throws SQLException {ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();shardingRuleConfig.getTableRuleConfigs().add(getOrderTableRuleConfiguration());shardingRuleConfig.getTableRuleConfigs().add(getOrderItemTableRuleConfiguration());shardingRuleConfig.getBindingTableGroups().add("t_order, t_order_item");shardingRuleConfig.getBroadcastTables().add("t_config");shardingRuleConfig.setDefaultDatabaseShardingStrategyConfig(new InlineShardingStrategyConfiguration("user_id", "ds${user_id % 2}"));shardingRuleConfig.setDefaultTableShardingStrategyConfig(new StandardShardingStrategyConfiguration("order_id", new ModuloShardingTableAlgorithm()));return ShardingDataSourceFactory.createDataSource(createDataSourceMap(), shardingRuleConfig);}TableRuleConfiguration getOrderTableRuleConfiguration() {TableRuleConfiguration result = new TableRuleConfiguration();result.setLogicTable("t_order");result.setActualDataNodes("ds${0..1}.t_order${0..1}");result.setKeyGeneratorColumnName("order_id");return result;}TableRuleConfiguration getOrderItemTableRuleConfiguration() {TableRuleConfiguration result = new TableRuleConfiguration();result.setLogicTable("t_order_item");result.setActualDataNodes("ds${0..1}.t_order_item${0..1}");return result;}Map createDataSourceMap() {Map result = new HashMap<>();result.put("ds0", DataSourceUtil.createDataSource("ds0"));result.put("ds1", DataSourceUtil.createDataSource("ds1"));return result;}

读写分离

 DataSource getMasterSlaveDataSource() throws SQLException {MasterSlaveRuleConfiguration masterSlaveRuleConfig = new MasterSlaveRuleConfiguration();masterSlaveRuleConfig.setName("ds_master_slave");masterSlaveRuleConfig.setMasterDataSourceName("ds_master");masterSlaveRuleConfig.setSlaveDataSourceNames(Arrays.asList("ds_slave0", "ds_slave1"));return MasterSlaveDataSourceFactory.createDataSource(createDataSourceMap(), masterSlaveRuleConfig, new LinkedHashMap(), new Properties());}Map createDataSourceMap() {Map result = new HashMap<>();result.put("ds_master", DataSourceUtil.createDataSource("ds_master"));result.put("ds_slave0", DataSourceUtil.createDataSource("ds_slave0"));result.put("ds_slave1", DataSourceUtil.createDataSource("ds_slave1"));return result;}

数据分片 + 读写分离

DataSource getDataSource() throws SQLException {ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();shardingRuleConfig.getTableRuleConfigs().add(getOrderTableRuleConfiguration());shardingRuleConfig.getTableRuleConfigs().add(getOrderItemTableRuleConfiguration());shardingRuleConfig.getBindingTableGroups().add("t_order, t_order_item");shardingRuleConfig.getBroadcastTables().add("t_config");shardingRuleConfig.setDefaultDatabaseShardingStrategyConfig(new StandardShardingStrategyConfiguration("user_id", new ModuloShardingDatabaseAlgorithm()));shardingRuleConfig.setDefaultTableShardingStrategyConfig(new StandardShardingStrategyConfiguration("order_id", new ModuloShardingTableAlgorithm()));shardingRuleConfig.setMasterSlaveRuleConfigs(getMasterSlaveRuleConfigurations());return ShardingDataSourceFactory.createDataSource(createDataSourceMap(), shardingRuleConfig, new HashMap(), new Properties());
}TableRuleConfiguration getOrderTableRuleConfiguration() {TableRuleConfiguration result = new TableRuleConfiguration();result.setLogicTable("t_order");result.setActualDataNodes("ds_${0..1}.t_order_${[0, 1]}");result.setKeyGeneratorColumnName("order_id");return result;
}TableRuleConfiguration getOrderItemTableRuleConfiguration() {TableRuleConfiguration result = new TableRuleConfiguration();result.setLogicTable("t_order_item");result.setActualDataNodes("ds_${0..1}.t_order_item_${[0, 1]}");return result;
}List getMasterSlaveRuleConfigurations() {MasterSlaveRuleConfiguration masterSlaveRuleConfig1 = new MasterSlaveRuleConfiguration("ds_0", "demo_ds_master_0", Arrays.asList("demo_ds_master_0_slave_0", "demo_ds_master_0_slave_1"));MasterSlaveRuleConfiguration masterSlaveRuleConfig2 = new MasterSlaveRuleConfiguration("ds_1", "demo_ds_master_1", Arrays.asList("demo_ds_master_1_slave_0", "demo_ds_master_1_slave_1"));return Lists.newArrayList(masterSlaveRuleConfig1, masterSlaveRuleConfig2);
}Map createDataSourceMap() {final Map result = new HashMap<>();result.put("demo_ds_master_0", DataSourceUtil.createDataSource("demo_ds_master_0"));result.put("demo_ds_master_0_slave_0", DataSourceUtil.createDataSource("demo_ds_master_0_slave_0"));result.put("demo_ds_master_0_slave_1", DataSourceUtil.createDataSource("demo_ds_master_0_slave_1"));result.put("demo_ds_master_1", DataSourceUtil.createDataSource("demo_ds_master_1"));result.put("demo_ds_master_1_slave_0", DataSourceUtil.createDataSource("demo_ds_master_1_slave_0"));result.put("demo_ds_master_1_slave_1", DataSourceUtil.createDataSource("demo_ds_master_1_slave_1"));return result;
}

数据治理

DataSource getDataSource() throws SQLException {return OrchestrationShardingDataSourceFactory.createDataSource(createDataSourceMap(), createShardingRuleConfig(), new HashMap(), new Properties(), new OrchestrationConfiguration("orchestration-sharding-data-source", getRegistryCenterConfiguration(), false));
}private RegistryCenterConfiguration getRegistryCenterConfiguration() {RegistryCenterConfiguration regConfig = new RegistryCenterConfiguration();regConfig.setServerLists("localhost:2181");regConfig.setNamespace("sharding-sphere-orchestration");return regConfig;
}

配置项说明

数据分片

ShardingDataSourceFactory

数据分片的数据源创建工厂。

名称数据类型说明
dataSourceMapMap数据源配置
shardingRuleConfigShardingRuleConfiguration数据分片配置规则
configMap (?)Map用户自定义配置
props (?)Properties属性配置

ShardingRuleConfiguration

分片规则配置对象。

名称数据类型说明
tableRuleConfigsCollection分片规则列表
bindingTableGroups (?)Collection绑定表规则列表
broadcastTables (?)Collection绑定表规则列表
defaultDataSourceName (?)String未配置分片规则的表将通过默认数据源定位
defaultDatabaseShardingStrategyConfig (?)ShardingStrategyConfiguration默认分库策略
defaultTableShardingStrategyConfig (?)ShardingStrategyConfiguration默认分表策略
defaultKeyGenerator (?)KeyGenerator默认自增列值生成器,缺省使用io.shardingsphere.core.keygen.DefaultKeyGenerator
masterSlaveRuleConfigs (?)Collection读写分离规则,缺省表示不使用读写分离

TableRuleConfiguration

表分片规则配置对象。

名称数据类型说明
logicTableString逻辑表名称
actualDataNodes (?)String由数据源名 + 表名组成,以小数点分隔。多个表以逗号分隔,支持inline表达式。缺省表示使用已知数据源与逻辑表名称生成数据节点。用于广播表(即每个库中都需要一个同样的表用于关联查询,多为字典表)或只分库不分表且所有库的表结构完全一致的情况
databaseShardingStrategyConfig (?)ShardingStrategyConfiguration分库策略,缺省表示使用默认分库策略
tableShardingStrategyConfig (?)ShardingStrategyConfiguration分表策略,缺省表示使用默认分表策略
logicIndex (?)String逻辑索引名称,对于分表的Oracle/PostgreSQL数据库中DROP INDEX XXX语句,需要通过配置逻辑索引名称定位所执行SQL的真实分表
keyGeneratorColumnName (?)String自增列名称,缺省表示不使用自增主键生成器
keyGenerator (?)KeyGenerator自增列值生成器,缺省表示使用默认自增主键生成器

StandardShardingStrategyConfiguration

ShardingStrategyConfiguration的实现类,用于单分片键的标准分片场景。

名称数据类型说明
shardingColumnString分片列名称
preciseShardingAlgorithmPreciseShardingAlgorithm精确分片算法,用于=和IN
rangeShardingAlgorithm (?)RangeShardingAlgorithm范围分片算法,用于BETWEEN

ComplexShardingStrategyConfiguration

ShardingStrategyConfiguration的实现类,用于多分片键的复合分片场景。

名称数据类型说明
shardingColumnsString分片列名称,多个列以逗号分隔
shardingAlgorithmComplexKeysShardingAlgorithm复合分片算法

InlineShardingStrategyConfiguration

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

名称数据类型说明
shardingColumnString分片列名称
algorithmExpressionString分片算法行表达式,需符合groovy语法,详情请参考行表达式

HintShardingStrategyConfiguration

ShardingStrategyConfiguration的实现类,用于配置Hint方式分片策略。

名称数据类型说明
shardingAlgorithmHintShardingAlgorithmHint分片算法

NoneShardingStrategyConfiguration

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

PropertiesConstant

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

名称数据类型说明
sql.show (?)boolean是否开启SQL显示,默认值: false
executor.size (?)int工作线程数量,默认值: CPU核数

configMap

用户自定义配置。

读写分离

MasterSlaveDataSourceFactory

读写分离的数据源创建工厂。

名称数据类型说明
dataSourceMapMap数据源与其名称的映射
masterSlaveRuleConfigMasterSlaveRuleConfiguration读写分离规则
configMap (?)Map用户自定义配置
props (?)Properties属性配置

MasterSlaveRuleConfiguration

读写分离规则配置对象。

名称数据类型说明
nameString读写分离数据源名称
masterDataSourceNameString主库数据源名称
slaveDataSourceNamesCollection从库数据源名称列表
loadBalanceAlgorithm (?)MasterSlaveLoadBalanceAlgorithm从库负载均衡算法

configMap

用户自定义配置。

PropertiesConstant

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

名称数据类型说明
sql.show (?)boolean是否打印SQL解析和改写日志,默认值: false
executor.size (?)int用于SQL执行的工作线程数量,为零则表示无限制。默认值: 0
max.connections.size.per.query (?)int每个物理数据库为每次查询分配的最大连接数量。默认值: 1

数据治理

OrchestrationShardingDataSourceFactory

数据分片 + 数据治理的数据源工厂。

名称数据类型说明
dataSourceMapMap同ShardingDataSourceFactory
shardingRuleConfigShardingRuleConfiguration同ShardingDataSourceFactory
configMap (?)Map同ShardingDataSourceFactory
props (?)Properties同ShardingDataSourceFactory
orchestrationConfigOrchestrationConfiguration数据治理规则配置

OrchestrationMasterSlaveDataSourceFactory

读写分离 + 数据治理的数据源工厂。

名称数据类型说明
dataSourceMapMap同MasterSlaveDataSourceFactory
masterSlaveRuleConfigMasterSlaveRuleConfiguration同MasterSlaveDataSourceFactory
configMap (?)Map同MasterSlaveDataSourceFactory
props (?)Properties同ShardingDataSourceFactory
orchestrationConfigOrchestrationConfiguration数据治理规则配置

OrchestrationConfiguration

数据治理规则配置对象。

名称数据类型说明
nameString数据治理实例名称
overwriteboolean本地配置是否覆盖注册中心配置,如果可覆盖,每次启动都以本地配置为准
regCenterConfigRegistryCenterConfiguration注册中心配置

RegistryCenterConfiguration

用于配置注册中心。

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

Yaml配置

配置示例

数据分片

dataSources:ds0: !!org.apache.commons.dbcp.BasicDataSourcedriverClassName: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/ds0username: rootpassword: ds1: !!org.apache.commons.dbcp.BasicDataSourcedriverClassName: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/ds1username: rootpassword: shardingRule:  tables:t_order: actualDataNodes: ds${0..1}.t_order${0..1}tableStrategy: inline:shardingColumn: order_idalgorithmExpression: t_order${order_id % 2}keyGeneratorColumnName: order_idt_order_item:actualDataNodes: ds${0..1}.t_order_item${0..1}tableStrategy:inline:shardingColumn: order_idalgorithmExpression: t_order_item${order_id % 2}  bindingTables:- t_order,t_order_itembroadcastTables:- t_configdefaultDataSourceName: ds0defaultDatabaseStrategy:inline:shardingColumn: user_idalgorithmExpression: ds${user_id % 2}defaultTableStrategy:none:defaultKeyGeneratorClassName: io.shardingsphere.core.keygen.DefaultKeyGeneratorprops:sql.show: true

读写分离

dataSources:ds_master: !!org.apache.commons.dbcp.BasicDataSourcedriverClassName: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/ds_masterusername: rootpassword: ds_slave0: !!org.apache.commons.dbcp.BasicDataSourcedriverClassName: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/ds_slave0username: rootpassword: ds_slave1: !!org.apache.commons.dbcp.BasicDataSourcedriverClassName: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/ds_slave1username: rootpassword: masterSlaveRule:name: ds_msmasterDataSourceName: ds_masterslaveDataSourceNames: - ds_slave0- ds_slave1

数据分片 + 读写分离

dataSources:ds0: !!org.apache.commons.dbcp.BasicDataSourcedriverClassName: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/ds0username: rootpassword: ds0_slave0: !!org.apache.commons.dbcp.BasicDataSourcedriverClassName: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/ds0_slave0username: rootpassword: ds0_slave1: !!org.apache.commons.dbcp.BasicDataSourcedriverClassName: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/ds0_slave1username: rootpassword: ds1: !!org.apache.commons.dbcp.BasicDataSourcedriverClassName: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/ds1username: rootpassword: ds1_slave0: !!org.apache.commons.dbcp.BasicDataSourcedriverClassName: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/ds1_slave0username: rootpassword: ds1_slave1: !!org.apache.commons.dbcp.BasicDataSourcedriverClassName: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/ds1_slave1username: rootpassword: shardingRule:  tables:t_order: actualDataNodes: ms_ds${0..1}.t_order${0..1}tableStrategy: inline:shardingColumn: order_idalgorithmExpression: t_order${order_id % 2}keyGeneratorColumnName: order_idt_order_item:actualDataNodes: ms_ds${0..1}.t_order_item${0..1}tableStrategy:inline:shardingColumn: order_idalgorithmExpression: t_order_item${order_id % 2}  bindingTables:- t_order,t_order_itembroadcastTables:- t_configdefaultDataSourceName: ds_0defaultDatabaseStrategy:inline:shardingColumn: user_idalgorithmExpression: ms_ds${user_id % 2}defaultTableStrategy:none:defaultKeyGeneratorClassName: io.shardingsphere.core.keygen.DefaultKeyGeneratormasterSlaveRules:ms_ds0:masterDataSourceName: ds0slaveDataSourceNames:- ds0_slave0- ds0_slave1loadBalanceAlgorithmType: ROUND_ROBINconfigMap:master-slave-key0: master-slave-value0ms_ds1:masterDataSourceName: ds1slaveDataSourceNames: - ds1_slave0- ds1_slave1loadBalanceAlgorithmType: ROUND_ROBINconfigMap:master-slave-key1: master-slave-value1props:sql.show: true

数据治理

#省略数据分片和读写分离配置orchestration:name: orchestration_dsoverwrite: trueregistry:namespace: orchestrationserverLists: localhost:2181

配置项说明

数据分片

dataSources: #数据源配置,可配置多个data_source_name

  : # `!!`表示实例化该类driverClassName: #数据库驱动类名url: #数据库url连接username: #数据库用户名password: #数据库密码# ... 数据库连接池的其它属性shardingRule:tables: #数据分片规则配置,可配置多个logic_table_name: #逻辑表名称actualDataNodes: #由数据源名 + 表名组成,以小数点分隔。多个表以逗号分隔,支持inline表达式。缺省表示使用已知数据源与逻辑表名称生成数据节点。用于广播表(即每个库中都需要一个同样的表用于关联查询,多为字典表)或只分库不分表且所有库的表结构完全一致的情况databaseStrategy: #分库策略,缺省表示使用默认分库策略,以下的分片策略只能选其一standard: #用于单分片键的标准分片场景shardingColumn: #分片列名称preciseAlgorithmClassName: #精确分片算法类名称,用于=和IN。。该类需实现PreciseShardingAlgorithm接口并提供无参数的构造器rangeAlgorithmClassName: #范围分片算法类名称,用于BETWEEN,可选。。该类需实现RangeShardingAlgorithm接口并提供无参数的构造器complex: #用于多分片键的复合分片场景shardingColumns: #分片列名称,多个列以逗号分隔algorithmClassName: #复合分片算法类名称。该类需实现ComplexKeysShardingAlgorithm接口并提供无参数的构造器inline: #行表达式分片策略shardingColumn: #分片列名称algorithmInlineExpression: #分片算法行表达式,需符合groovy语法hint: #Hint分片策略algorithmClassName: #Hint分片算法类名称。该类需实现HintShardingAlgorithm接口并提供无参数的构造器none: #不分片tableStrategy: #分表策略,同分库策略keyGeneratorColumnName: #自增列名称,缺省表示不使用自增主键生成器keyGeneratorClassName: #自增列值生成器类名称。该类需实现KeyGenerator接口并提供无参数的构造器logicIndex: #逻辑索引名称,对于分表的Oracle/PostgreSQL数据库中DROP INDEX XXX语句,需要通过配置逻辑索引名称定位所执行SQL的真实分表bindingTables: #绑定表规则列表-  - - bindingTables: #广播表规则列表- table_name1- table_name2- table_name_xdefaultDataSourceName: #未配置分片规则的表将通过默认数据源定位  defaultDatabaseStrategy: #默认数据库分片策略,同分库策略defaultTableStrategy: #默认表分片策略,同分库策略defaultKeyGeneratorClassName: #默认自增列值生成器类名称,缺省使用io.shardingsphere.core.keygen.DefaultKeyGenerator。该类需实现KeyGenerator接口并提供无参数的构造器masterSlaveRules: #读写分离规则,详见读写分离部分: #数据源名称,需要与真实数据源匹配,可配置多个data_source_namemasterDataSourceName: #详见读写分离部分slaveDataSourceNames: #详见读写分离部分loadBalanceAlgorithmClassName: #详见读写分离部分loadBalanceAlgorithmType: #详见读写分离部分configMap: #用户自定义配置key1: value1key2: value2keyx: valuexprops: #属性配置sql.show: #是否开启SQL显示,默认值: falseexecutor.size: #工作线程数量,默认值: CPU核数configMap: #用户自定义配置key1: value1key2: value2keyx: valuex

读写分离

dataSources: #省略数据源配置,与数据分片一致masterSlaveRule:name: #读写分离数据源名称masterDataSourceName: #主库数据源名称slaveDataSourceNames: #从库数据源名称列表- - - loadBalanceAlgorithmClassName: #从库负载均衡算法类名称。该类需实现MasterSlaveLoadBalanceAlgorithm接口且提供无参数构造器loadBalanceAlgorithmType: #从库负载均衡算法类型,可选值:ROUND_ROBIN,RANDOM。若`loadBalanceAlgorithmClassName`存在则忽略该配置configMap: #用户自定义配置key1: value1key2: value2keyx: valuexprops: #属性配置sql.show: #是否开启SQL显示,默认值: falseexecutor.size: #工作线程数量,默认值: CPU核数

数据治理

dataSources: #省略数据源配置
shardingRule: #省略分片规则配置
masterSlaveRule: #省略读写分离规则配置orchestration:name: #数据治理实例名称overwrite: #本地配置是否覆盖注册中心配置。如果可覆盖,每次启动都以本地配置为准registry: #注册中心配置serverLists: #连接注册中心服务器的列表。包括IP地址和端口号。多个地址用逗号分隔。如: host1:2181,host2:2181namespace: #注册中心的命名空间digest: #连接注册中心的权限令牌。缺省为不需要权限验证operationTimeoutMilliseconds: #操作超时的毫秒数,默认500毫秒maxRetries: #连接失败后的最大重试次数,默认3次retryIntervalMilliseconds: #重试间隔毫秒数,默认500毫秒timeToLiveSeconds: #临时节点存活秒数,默认60秒

Yaml语法说明

!! 表示实例化该类

  • 表示可以包含一个或多个
    [] 表示数组,可以与减号相互替换使用

Spring Boot配置

注意事项

行表达式标识符可以使用...或{...}或...或->{…},但前者与Spring本身的属性文件占位符冲突,因此在Spring环境中使用行表达式标识符建议使用$->{…}。

配置示例

数据分片

sharding.jdbc.datasource.names=ds0,ds1sharding.jdbc.datasource.ds0.type=org.apache.commons.dbcp.BasicDataSource
sharding.jdbc.datasource.ds0.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds0.url=jdbc:mysql://localhost:3306/ds0
sharding.jdbc.datasource.ds0.username=root
sharding.jdbc.datasource.ds0.password=sharding.jdbc.datasource.ds1.type=org.apache.commons.dbcp.BasicDataSource
sharding.jdbc.datasource.ds1.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds1.url=jdbc:mysql://localhost:3306/ds1
sharding.jdbc.datasource.ds1.username=root
sharding.jdbc.datasource.ds1.password=sharding.jdbc.config.sharding.tables.t_order.actual-data-nodes=ds$->{0..1}.t_order$->{0..1}
sharding.jdbc.config.sharding.tables.t_order.table-strategy.inline.sharding-column=order_id
sharding.jdbc.config.sharding.tables.t_order.table-strategy.inline.algorithm-expression=t_order$->{order_id % 2}
sharding.jdbc.config.sharding.tables.t_order.key-generator-column-name=order_id
sharding.jdbc.config.sharding.tables.t_order_item.actual-data-nodes=ds$->{0..1}.t_order_item$->{0..1}
sharding.jdbc.config.sharding.tables.t_order_item.table-strategy.inline.sharding-column=order_id
sharding.jdbc.config.sharding.tables.t_order_item.table-strategy.inline.algorithm-expression=t_order_item$->{order_id % 2}
sharding.jdbc.config.sharding.tables.t_order_item.key-generator-column-name=order_item_id
sharding.jdbc.config.sharding.binding-tables=t_order,t_order_item
sharding.jdbc.config.sharding.broadcast-tables=t_configsharding.jdbc.config.sharding.default-database-strategy.inline.sharding-column=user_id
sharding.jdbc.config.sharding.default-database-strategy.inline.algorithm-expression=ds$->{user_id % 2}

读写分离

sharding.jdbc.datasource.names=master,slave0,slave1sharding.jdbc.datasource.master.type=org.apache.commons.dbcp.BasicDataSource
sharding.jdbc.datasource.master.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.master.url=jdbc:mysql://localhost:3306/master
sharding.jdbc.datasource.master.username=root
sharding.jdbc.datasource.master.password=sharding.jdbc.datasource.slave0.type=org.apache.commons.dbcp.BasicDataSource
sharding.jdbc.datasource.slave0.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.slave0.url=jdbc:mysql://localhost:3306/slave0
sharding.jdbc.datasource.slave0.username=root
sharding.jdbc.datasource.slave0.password=sharding.jdbc.datasource.slave1.type=org.apache.commons.dbcp.BasicDataSource
sharding.jdbc.datasource.slave1.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.slave1.url=jdbc:mysql://localhost:3306/slave1
sharding.jdbc.datasource.slave1.username=root
sharding.jdbc.datasource.slave1.password=sharding.jdbc.config.masterslave.load-balance-algorithm-type=round_robin
sharding.jdbc.config.masterslave.name=ms
sharding.jdbc.config.masterslave.master-data-source-name=master
sharding.jdbc.config.masterslave.slave-data-source-names=slave0,slave1sharding.jdbc.config.masterslave.props.sql.show=true

数据分片 + 读写分离

sharding.jdbc.datasource.names=master0,master1,master0slave0,master0slave1,master1slave0,master1slave1sharding.jdbc.datasource.master0.type=org.apache.commons.dbcp.BasicDataSource
sharding.jdbc.datasource.master0.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.master0.url=jdbc:mysql://localhost:3306/master0
sharding.jdbc.datasource.master0.username=root
sharding.jdbc.datasource.master0.password=sharding.jdbc.datasource.master0slave0.type=org.apache.commons.dbcp.BasicDataSource
sharding.jdbc.datasource.master0slave0.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.master0slave0.url=jdbc:mysql://localhost:3306/master0slave0
sharding.jdbc.datasource.master0slave0.username=root
sharding.jdbc.datasource.master0slave0.password=
sharding.jdbc.datasource.master0slave1.type=org.apache.commons.dbcp.BasicDataSource
sharding.jdbc.datasource.master0slave1.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.master0slave1.url=jdbc:mysql://localhost:3306/master0slave1
sharding.jdbc.datasource.master0slave1.username=root
sharding.jdbc.datasource.master0slave1.password=sharding.jdbc.datasource.master1.type=org.apache.commons.dbcp.BasicDataSource
sharding.jdbc.datasource.master1.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.master1.url=jdbc:mysql://localhost:3306/master1
sharding.jdbc.datasource.master1.username=root
sharding.jdbc.datasource.master1.password=sharding.jdbc.datasource.master1slave0.type=org.apache.commons.dbcp.BasicDataSource
sharding.jdbc.datasource.master1slave0.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.master1slave0.url=jdbc:mysql://localhost:3306/master1slave0
sharding.jdbc.datasource.master1slave0.username=root
sharding.jdbc.datasource.master1slave0.password=
sharding.jdbc.datasource.master1slave1.type=org.apache.commons.dbcp.BasicDataSource
sharding.jdbc.datasource.master1slave1.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.master1slave1.url=jdbc:mysql://localhost:3306/master1slave1
sharding.jdbc.datasource.master1slave1.username=root
sharding.jdbc.datasource.master1slave1.password=sharding.jdbc.config.sharding.tables.t_order.actual-data-nodes=ds$->{0..1}.t_order$->{0..1}
sharding.jdbc.config.sharding.tables.t_order.table-strategy.inline.sharding-column=order_id
sharding.jdbc.config.sharding.tables.t_order.table-strategy.inline.algorithm-expression=t_order$->{order_id % 2}
sharding.jdbc.config.sharding.tables.t_order.key-generator-column-name=order_id
sharding.jdbc.config.sharding.tables.t_order_item.actual-data-nodes=ds$->{0..1}.t_order_item$->{0..1}
sharding.jdbc.config.sharding.tables.t_order_item.table-strategy.inline.sharding-column=order_id
sharding.jdbc.config.sharding.tables.t_order_item.table-strategy.inline.algorithm-expression=t_order_item$->{order_id % 2}
sharding.jdbc.config.sharding.tables.t_order_item.key-generator-column-name=order_item_id
sharding.jdbc.config.sharding.binding-tables=t_order,t_order_item
sharding.jdbc.config.sharding.broadcast-tables=t_configsharding.jdbc.config.sharding.default-database-strategy.inline.sharding-column=user_id
sharding.jdbc.config.sharding.default-database-strategy.inline.algorithm-expression=master$->{user_id % 2}sharding.jdbc.config.sharding.master-slave-rules.ds0.master-data-source-name=master0
sharding.jdbc.config.sharding.master-slave-rules.ds0.slave-data-source-names=master0slave0, master0slave1
sharding.jdbc.config.sharding.master-slave-rules.ds1.master-data-source-name=master1
sharding.jdbc.config.sharding.master-slave-rules.ds1.slave-data-source-names=master1slave0, master1slave1

数据治理

sharding.jdbc.datasource.names=ds,ds0,ds1
sharding.jdbc.datasource.ds.type=org.apache.commons.dbcp.BasicDataSource
sharding.jdbc.datasource.ds.driver-class-name=org.h2.Driver
sharding.jdbc.datasource.ds.url=jdbc:mysql://localhost:3306/ds
sharding.jdbc.datasource.ds.username=root
sharding.jdbc.datasource.ds.password=sharding.jdbc.datasource.ds0.type=org.apache.commons.dbcp.BasicDataSource
sharding.jdbc.datasource.ds0.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds0.url=jdbc:mysql://localhost:3306/ds0
sharding.jdbc.datasource.ds0.username=root
sharding.jdbc.datasource.ds0.password=sharding.jdbc.datasource.ds1.type=org.apache.commons.dbcp.BasicDataSource
sharding.jdbc.datasource.ds1.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds1.url=jdbc:mysql://localhost:3306/ds1
sharding.jdbc.datasource.ds1.username=root
sharding.jdbc.datasource.ds1.password=sharding.jdbc.config.sharding.default-data-source-name=ds
sharding.jdbc.config.sharding.default-database-strategy.inline.sharding-column=user_id
sharding.jdbc.config.sharding.default-database-strategy.inline.algorithm-expression=ds$->{user_id % 2}
sharding.jdbc.config.sharding.tables.t_order.actual-data-nodes=ds$->{0..1}.t_order$->{0..1}
sharding.jdbc.config.sharding.tables.t_order.table-strategy.inline.sharding-column=order_id
sharding.jdbc.config.sharding.tables.t_order.table-strategy.inline.algorithm-expression=t_order$->{order_id % 2}
sharding.jdbc.config.sharding.tables.t_order.key-generator-column-name=order_id
sharding.jdbc.config.sharding.tables.t_order_item.actual-data-nodes=ds$->{0..1}.t_order_item$->{0..1}
sharding.jdbc.config.sharding.tables.t_order_item.table-strategy.inline.sharding-column=order_id
sharding.jdbc.config.sharding.tables.t_order_item.table-strategy.inline.algorithm-expression=t_order_item$->{order_id % 2}
sharding.jdbc.config.sharding.tables.t_order_item.key-generator-column-name=order_item_id
sharding.jdbc.config.sharding.binding-tables=t_order,t_order_item
sharding.jdbc.config.sharding.broadcast-tables=t_configsharding.jdbc.config.sharding.default-database-strategy.inline.sharding-column=user_id
sharding.jdbc.config.sharding.default-database-strategy.inline.algorithm-expression=master$->{user_id % 2}sharding.jdbc.config.orchestration.name=spring_boot_ds_sharding
sharding.jdbc.config.orchestration.overwrite=true
sharding.jdbc.config.orchestration.registry.namespace=orchestration-spring-boot-sharding-test
sharding.jdbc.config.orchestration.registry.server-lists=localhost:2181

配置项说明

数据分片

sharding.jdbc.datasource.names= #数据源名称,多数据源以逗号分隔sharding.jdbc.datasource..type= #数据库连接池类名称
sharding.jdbc.datasource..driver-class-name= #数据库驱动类名
sharding.jdbc.datasource..url= #数据库url连接
sharding.jdbc.datasource..username= #数据库用户名
sharding.jdbc.datasource..password= #数据库密码
sharding.jdbc.datasource..xxx= #数据库连接池的其它属性sharding.jdbc.config.sharding.tables..actual-data-nodes= #由数据源名 + 表名组成,以小数点分隔。多个表以逗号分隔,支持inline表达式。缺省表示使用已知数据源与逻辑表名称生成数据节点。用于广播表(即每个库中都需要一个同样的表用于关联查询,多为字典表)或只分库不分表且所有库的表结构完全一致的情况#分库策略,缺省表示使用默认分库策略,以下的分片策略只能选其一#用于单分片键的标准分片场景
sharding.jdbc.config.sharding.tables..database-strategy.standard.sharding-column= #分片列名称
sharding.jdbc.config.sharding.tables..database-strategy.standard.precise-algorithm-class-name= #精确分片算法类名称,用于=和IN。该类需实现PreciseShardingAlgorithm接口并提供无参数的构造器
sharding.jdbc.config.sharding.tables..database-strategy.standard.range-algorithm-class-name= #范围分片算法类名称,用于BETWEEN,可选。该类需实现RangeShardingAlgorithm接口并提供无参数的构造器#用于多分片键的复合分片场景
sharding.jdbc.config.sharding.tables..database-strategy.complex.sharding-columns= #分片列名称,多个列以逗号分隔
sharding.jdbc.config.sharding.tables..database-strategy.complex.algorithm-class-name= #复合分片算法类名称。该类需实现ComplexKeysShardingAlgorithm接口并提供无参数的构造器#行表达式分片策略
sharding.jdbc.config.sharding.tables..database-strategy.inline.sharding-column= #分片列名称
sharding.jdbc.config.sharding.tables..database-strategy.inline.algorithm-expression= #分片算法行表达式,需符合groovy语法#Hint分片策略
sharding.jdbc.config.sharding.tables..database-strategy.hint.algorithm-class-name= #Hint分片算法类名称。该类需实现HintShardingAlgorithm接口并提供无参数的构造器#分表策略,同分库策略
sharding.jdbc.config.sharding.tables..table-strategy.xxx= #省略sharding.jdbc.config.sharding.tables..key-generator-column-name= #自增列名称,缺省表示不使用自增主键生成器
sharding.jdbc.config.sharding.tables..key-generator-class-name= #自增列值生成器类名称,缺省表示使用默认自增列值生成器。该类需提供无参数的构造器sharding.jdbc.config.sharding.tables..logic-index= #逻辑索引名称,对于分表的Oracle/PostgreSQL数据库中DROP INDEX XXX语句,需要通过配置逻辑索引名称定位所执行SQL的真实分表sharding.jdbc.config.sharding.binding-tables[0]= #绑定表规则列表
sharding.jdbc.config.sharding.binding-tables[1]= #绑定表规则列表
sharding.jdbc.config.sharding.binding-tables[x]= #绑定表规则列表sharding.jdbc.config.sharding.broadcast-tables[0]= #广播表规则列表
sharding.jdbc.config.sharding.broadcast-tables[1]= #广播表规则列表
sharding.jdbc.config.sharding.broadcast-tables[x]= #广播表规则列表sharding.jdbc.config.sharding.default-data-source-name= #未配置分片规则的表将通过默认数据源定位
sharding.jdbc.config.sharding.default-database-strategy.xxx= #默认数据库分片策略,同分库策略
sharding.jdbc.config.sharding.default-table-strategy.xxx= #默认表分片策略,同分表策略
sharding.jdbc.config.sharding.default-key-generator-class-name= #默认自增列值生成器类名称,缺省使用io.shardingsphere.core.keygen.DefaultKeyGenerator。该类需实现KeyGenerator接口并提供无参数的构造器sharding.jdbc.config.sharding.master-slave-rules..master-data-source-name= #详见读写分离部分
sharding.jdbc.config.sharding.master-slave-rules..slave-data-source-names[0]= #详见读写分离部分
sharding.jdbc.config.sharding.master-slave-rules..slave-data-source-names[1]= #详见读写分离部分
sharding.jdbc.config.sharding.master-slave-rules..slave-data-source-names[x]= #详见读写分离部分
sharding.jdbc.config.sharding.master-slave-rules..load-balance-algorithm-class-name= #详见读写分离部分
sharding.jdbc.config.sharding.master-slave-rules..load-balance-algorithm-type= #详见读写分离部分
sharding.jdbc.config.sharding.master-slave-rules..config.map.key1= #详见读写分离部分
sharding.jdbc.config.sharding.master-slave-rules..config.map.key2= #详见读写分离部分
sharding.jdbc.config.sharding.master-slave-rules..config.map.keyx= #详见读写分离部分sharding.jdbc.config.sharding.props.sql.show= #是否开启SQL显示,默认值: false
sharding.jdbc.config.sharding.props.executor.size= #工作线程数量,默认值: CPU核数sharding.jdbc.config.sharding.config.map.key1= #用户自定义配置
sharding.jdbc.config.sharding.config.map.key2= #用户自定义配置
sharding.jdbc.config.sharding.config.map.keyx= #用户自定义配置

读写分离

#省略数据源配置,与数据分片一致sharding.jdbc.config.sharding.master-slave-rules..master-data-source-name= #主库数据源名称
sharding.jdbc.config.sharding.master-slave-rules..slave-data-source-names[0]= #从库数据源名称列表
sharding.jdbc.config.sharding.master-slave-rules..slave-data-source-names[1]= #从库数据源名称列表
sharding.jdbc.config.sharding.master-slave-rules..slave-data-source-names[x]= #从库数据源名称列表
sharding.jdbc.config.sharding.master-slave-rules..load-balance-algorithm-class-name= #从库负载均衡算法类名称。该类需实现MasterSlaveLoadBalanceAlgorithm接口且提供无参数构造器
sharding.jdbc.config.sharding.master-slave-rules..load-balance-algorithm-type= #从库负载均衡算法类型,可选值:ROUND_ROBIN,RANDOM。若`load-balance-algorithm-class-name`存在则忽略该配置sharding.jdbc.config.sharding.master-slave-rules..config.map.key1= #用户自定义配置
sharding.jdbc.config.sharding.master-slave-rules..config.map.key2= #用户自定义配置
sharding.jdbc.config.sharding.master-slave-rules..config.map.keyx= #用户自定义配置sharding.jdbc.config.masterslave.props.sql.show= #是否开启SQL显示,默认值: false
sharding.jdbc.config.masterslave.props.executor.size= #工作线程数量,默认值: CPU核数

数据治理

#省略数据源、数据分片和读写分离配置sharding.jdbc.config.sharding.orchestration.name= #数据治理实例名称
sharding.jdbc.config.sharding.orchestration.overwrite= #本地配置是否覆盖注册中心配置。如果可覆盖,每次启动都以本地配置为准
sharding.jdbc.config.sharding.orchestration.registry.server-lists= #连接注册中心服务器的列表。包括IP地址和端口号。多个地址用逗号分隔。如: host1:2181,host2:2181
sharding.jdbc.config.sharding.orchestration.registry.namespace= #注册中心的命名空间
sharding.jdbc.config.sharding.orchestration.registry.digest= #连接注册中心的权限令牌。缺省为不需要权限验证
sharding.jdbc.config.sharding.orchestration.registry.operation-timeout-milliseconds= #操作超时的毫秒数,默认500毫秒
sharding.jdbc.config.sharding.orchestration.registry.max-retries= #连接失败后的最大重试次数,默认3次
sharding.jdbc.config.sharding.orchestration.registry.retry-interval-milliseconds= #重试间隔毫秒数,默认500毫秒
sharding.jdbc.config.sharding.orchestration.registry.time-to-live-seconds= #临时节点存活秒数,默认60秒

Spring命名空间配置

注意事项

行表达式标识符可以使用...或{...}或...或->{…},但前者与Spring本身的属性文件占位符冲突,因此在Spring环境中使用行表达式标识符建议使用$->{…}。

配置示例

数据分片


org.hibernate.dialect.MySQLDialectcreatetrue

读写分离


org.hibernate.dialect.MySQLDialectcreatetrue${sql_show}10bar

数据分片 + 读写分离


org.hibernate.dialect.MySQLDialectcreatetrue

数据治理




配置项说明

分库分表
命名空间:http://shardingsphere.io/schema/shardingsphere/sharding/sharding.xsd

名称类型说明
id属性Spring Bean Id
sharding-rule标签数据分片配置规则
config-map (?)标签用户自定义配置
props (?)标签属性配置

名称类型说明
data-source-names属性数据源Bean列表,多个Bean以逗号分隔
table-rules标签表分片规则配置对象
binding-table-rules (?)标签绑定表规则列表
broadcast-table-rules (?)标签广播表规则列表
default-data-source-name (?)属性未配置分片规则的表将通过默认数据源定位
default-database-strategy-ref (?)属性默认数据库分片策略,对应sharding:xxx-strategy中的策略Id,缺省表示不分库
default-table-strategy-ref (?)属性默认表分片策略,对应sharding:xxx-strategy中的策略Id,缺省表示不分表
default-key-generator-ref (?)属性默认自增列值生成器引用,缺省使用io.shardingsphere.core.keygen.DefaultKeyGenerator。该类需实现KeyGenerator接口

名称类型说明
table-rule (+)标签表分片规则配置对象

名称类型说明
logic-table属性逻辑表名称
actual-data-nodes (?)属性由数据源名 + 表名组成,以小数点分隔。多个表以逗号分隔,支持inline表达式。缺省表示使用已知数据源与逻辑表名称生成数据节点。用于广播表(即每个库中都需要一个同样的表用于关联查询,多为字典表)或只分库不分表且所有库的表结构完全一致的情况
database-strategy-ref (?)属性数据库分片策略,对应sharding:xxx-strategy中的策略Id,缺省表示使用配置的默认数据库分片策略
table-strategy-ref (?)属性表分片策略,对应sharding:xxx-strategy中的策略Id,缺省表示使用配置的默认表分片策略
generate-key-column-name (?)属性自增列名称,缺省表示不使用自增主键生成器
key-generator-ref (?)属性自增列值生成器引用,缺省表示使用默认自增列值生成器.该类需实现KeyGenerator接口
logic-index (?)属性逻辑索引名称,对于分表的Oracle/PostgreSQL数据库中DROP INDEX XXX语句,需要通过配置逻辑索引名称定位所执行SQL的真实分表

名称类型说明
binding-table-rule (+)标签绑定表规则

名称类型说明
logic-tables属性绑定规则的逻辑表名,多表以逗号分隔

名称类型说明
broadcast-table-rule (+)标签广播表规则

名称类型说明
table属性广播规则的表名

名称类型说明
id属性Spring Bean Id
sharding-column属性分片列名称
precise-algorithm-ref属性精确分片算法引用,用于=和IN。该类需实现PreciseShardingAlgorithm接口
range-algorithm-ref (?)属性范围分片算法引用,用于BETWEEN。该类需实现RangeShardingAlgorithm接口

名称类型说明
id属性Spring Bean Id
sharding-columns属性分片列名称,多个列以逗号分隔
algorithm-ref属性复合分片算法引用。该类需实现ComplexKeysShardingAlgorithm接口

名称类型说明
id属性Spring Bean Id
sharding-column属性分片列名称
algorithm-expression属性分片算法行表达式,需符合groovy语法

名称类型说明
id属性Spring Bean Id
algorithm-ref属性Hint分片算法。该类需实现HintShardingAlgorithm接口

名称类型说明
id属性Spring Bean Id

名称类型说明
sql.show (?)属性是否开启SQL显示,默认值: false
executor.size (?)属性工作线程数量,默认值: CPU核数


读写分离
命名空间:http://shardingsphere.io/schema/shardingsphere/masterslave/master-slave.xsd

名称类型说明
id属性Spring Bean Id
master-data-source-name属性主库数据源Bean Id
slave-data-source-names属性从库数据源Bean Id列表,多个Bean以逗号分隔
strategy-ref (?)属性从库负载均衡算法引用。该类需实现
strategy-type (?)属性从库负载均衡算法类型,可选值:ROUND_ROBIN,RANDOM。若strategy-ref存在则忽略该配置
config-map (?)标签用户自定义配置props (?)标签属性配置


名称类型说明
sql.show (?)属性是否开启SQL显示,默认值: false
executor.size (?)属性工作线程数量,默认值: CPU核数

数据分片 + 数据治理
命名空间:http://shardingsphere.io/schema/shardingsphere/orchestration/orchestration.xsd

名称类型说明
id属性ID
data-source-ref (?)属性被治理的数据库id
registry-center-ref属性注册中心id
overwrite属性本地配置是否覆盖注册中心配置。如果可覆盖,每次启动都以本地配置为准。 缺省为不覆盖

读写分离 + 数据治理
命名空间:http://shardingsphere.io/schema/shardingsphere/orchestration/orchestration.xsd

名称类型说明
id属性ID
data-source-ref (?)属性被治理的数据库id
registry-center-ref属性注册中心id
overwrite属性本地配置是否覆盖注册中心配置。如果可覆盖,每次启动都以本地配置为准。 缺省为不覆盖

数据治理注册中心
命名空间:http://shardingsphere.io/schema/shardingsphere/orchestration/orchestration.xsd

名称类型说明
id属性注册中心的Spring Bean Id
server-lists属性连接注册中心服务器的列表。包括IP地址和端口号。多个地址用逗号分隔。如: host1:2181,host2:2181
namespace (?)属性注册中心的命名空间
digest (?)属性连接注册中心的权限令牌。缺省为不需要权限验证
operation-timeout-milliseconds (?)属性操作超时的毫秒数,默认500毫秒
max-retries (?)属性连接失败后的最大重试次数,默认3次
retry-interval-milliseconds (?)属性重试间隔毫秒数,默认500毫秒
time-to-live-seconds (?)属性临时节点存活秒数,默认60秒

JDBC不支持项

DataSource接口

● 不支持timeout相关操作

Connection接口

● 不支持存储过程,函数,游标的操作
● 不支持执行native的SQL
● 不支持savepoint相关操作
● 不支持Schema/Catalog的操作
● 不支持自定义类型映射

Statement和PreparedStatement接口

● 不支持返回多结果集的语句(即存储过程,非SELECT多条数据)
● 不支持国际化字符的操作

对于ResultSet接口

● 不支持对于结果集指针位置判断
● 不支持通过非next方法改变结果指针位置
● 不支持修改结果集内容
● 不支持获取国际化字符
● 不支持获取Array

JDBC 4.1

● 不支持JDBC 4.1接口新功能

性能测试报告

测试结果概述

  1. 性能损耗测试:服务器资源充足、并发数相同,比较JDBC和Sharding-JDBC性能损耗,Sharding-JDBC相对JDBC损耗不超过7%。
  2. 性能对比测试:服务器资源使用到极限,相同的场景JDBC与Sharding-JDBC的吞吐量相当。
  3. 性能对比测试:服务器资源使用到极限,Sharding-JDBC采用分库分表后,Sharding-JDBC吞吐量较JDBC不分表有接近2倍的提升。
  4. 性能对比测试:服务器资源使用到极限,Sharding-JDBC V1.5.2与V1.4.2对比,性能比较稳定。

基准测试性能对比

业务场景JDBCSharding-JDBC1.5.2Sharding-JDBC1.5.2/JDBC损耗
单库单表查询4934704.7%
单库单表更新668263035.7%
单库单表插入685563757%

JDBC单库两库表与Sharding-JDBC两库各两表对比

业务场景JDBC单库两表Sharding-JDBC两库各两表性能提升至
查询17363331192%
更新917017997196%
插入1157423043199%

JDBC单库单表与Sharding-JDBC两库各一表对比

业务场景JDBC单库单表Sharding-JDBC两库各一表性能提升至
查询15862944185%
更新954818561194%
插入1118221414192%

Sharding-JDBC v1.4.2与v1.5.2版本对比

业务场景Sharding-JDBC 1.4.2Sharding-JDBC 1.5.21.5.2 / 1.4.2
查询29342944100.34%
更新1845418561100.58%
插入2104521414101.75%

测试目的

● 对比Sharding-JDBC 1.5.2与JDBC性能是否有较大损耗;
● Sharding-JDBC 1.52与1.4.2版本对比,性能是否有损耗;
● Sharding-JDBC 1.5.2是否存在非功能问题,为优化提供依据;

Sharding-Proxy

Proxy启动

  1. 下载Sharding-Proxy的最新发行版,地址:https://github.com/sharding-sphere/sharding-sphere-doc/raw/master/dist/sharding-proxy-3.0.0.tar.gz
  2. 解压缩后修改conf/server.yaml和以config-前缀开头的文件,如:conf/config-xxx.yaml文件,进行分片规则、读写分离规则配置. 配置方式请参考配置手册。
  3. Linux操作系统请运行bin/start.sh,Windows操作系统请运行bin/start.bat启动Sharding-Proxy。如需配置启动端口、配置文件位置,可参考快速入门 进行启动。
  4. 使用任何MySQL的客户端连接。如: mysql -u root -h 127.0.0.1 -P 3307

注册中心使用

若想使用Sharding-Proxy的数据库治理功能,则需要使用注册中心实现实例熔断和从库禁用功能。详情请参考支持的注册中心。

Zookeeper

  1. Sharding-Proxy默认提供了Zookeeper的注册中心解决方案。您只需按照配置规则进行注册中心的配置,即可使用。

Etcd

  1. 将Sharding-Proxy的lib目录下的sharding-orchestration-reg-zookeeper-curator-${sharding-sphere.version}.jar文件删除。
  2. Maven仓库下载Etcd解决方案的最新稳定版jar包。
  3. 将下载下来的jar包放到Sharding-Proxy的lib目录下。
  4. 按照配置规则进行注册中心的配置,即可使用。

其他第三方注册中心

  1. 将Sharding-Proxy的lib目录下的sharding-orchestration-reg-zookeeper-curator-${sharding-sphere.version}.jar文件删除。
  2. 使用SPI方式实现相关逻辑编码,并将生成的jar包放到Sharding-Proxy的lib目录下。
  3. 按照配置规则进行注册中心的配置,即可使用。

注意事项

  1. Sharding-Proxy默认使用3307端口,可以通过启动脚本追加参数作为启动端口号。如: bin/start.sh 3308
  2. Sharding-Proxy使用conf/server.yaml配置注册中心、认证信息以及公用属性。
  3. Sharding-Proxy支持多逻辑数据源,每个以config-前缀命名的yaml配置文件,即为一个逻辑数据源。

数据源与分片配置示例

Sharding-Proxy支持多逻辑数据源,每个以config-前缀命名的yaml配置文件,即为一个逻辑数据源。以下是config-xxx.yaml的配置配置示例。

数据分片

dataSources:
schemaName: sharding_dbdataSources:ds0: url: jdbc:mysql://localhost:3306/ds0username: rootpassword: autoCommit: trueconnectionTimeout: 30000idleTimeout: 60000maxLifetime: 1800000maximumPoolSize: 65ds1:url: jdbc:mysql://localhost:3306/ds1username: rootpassword: autoCommit: trueconnectionTimeout: 30000idleTimeout: 60000maxLifetime: 1800000maximumPoolSize: 65shardingRule:  tables:t_order: actualDataNodes: ds${0..1}.t_order${0..1}tableStrategy: inline:shardingColumn: order_idalgorithmExpression: t_order${order_id % 2}keyGeneratorColumnName: order_idt_order_item:actualDataNodes: ds${0..1}.t_order_item${0..1}tableStrategy:inline:shardingColumn: order_idalgorithmExpression: t_order_item${order_id % 2}  bindingTables:- t_order,t_order_itemdefaultDatabaseStrategy:inline:shardingColumn: user_idalgorithmExpression: ds${user_id % 2}defaultTableStrategy:none:defaultKeyGeneratorClassName: io.shardingsphere.core.keygen.DefaultKeyGenerator

读写分离

schemaName: master_slave_dbdataSources:ds_master:url: jdbc:mysql://localhost:3306/ds_masterusername: rootpassword: autoCommit: trueconnectionTimeout: 30000idleTimeout: 60000maxLifetime: 1800000maximumPoolSize: 65ds_slave0:url: jdbc:mysql://localhost:3306/ds_slave0username: rootpassword:autoCommit: trueconnectionTimeout: 30000idleTimeout: 60000maxLifetime: 1800000maximumPoolSize: 65 ds_slave1:url: jdbc:mysql://localhost:3306/ds_slave1username: rootpassword:autoCommit: trueconnectionTimeout: 30000idleTimeout: 60000maxLifetime: 1800000maximumPoolSize: 65 masterSlaveRule:name: ds_msmasterDataSourceName: ds_masterslaveDataSourceNames: - ds_slave0- ds_slave1

数据分片 + 读写分离

schemaName: sharding_master_slave_dbdataSources:ds0:url: jdbc:mysql://localhost:3306/ds0username: rootpassword:autoCommit: trueconnectionTimeout: 30000idleTimeout: 60000maxLifetime: 1800000maximumPoolSize: 65 ds0_slave0:url: jdbc:mysql://localhost:3306/ds0_slave0username: rootpassword: autoCommit: trueconnectionTimeout: 30000idleTimeout: 60000maxLifetime: 1800000maximumPoolSize: 65ds0_slave1:url: jdbc:mysql://localhost:3306/ds0_slave1username: rootpassword:autoCommit: trueconnectionTimeout: 30000idleTimeout: 60000maxLifetime: 1800000maximumPoolSize: 65ds1:url: jdbc:mysql://localhost:3306/ds1username: rootpassword: autoCommit: trueconnectionTimeout: 30000idleTimeout: 60000maxLifetime: 1800000maximumPoolSize: 65ds1_slave0:url: jdbc:mysql://localhost:3306/ds1_slave0username: rootpassword: autoCommit: trueconnectionTimeout: 30000idleTimeout: 60000maxLifetime: 1800000maximumPoolSize: 65ds1_slave1:url: jdbc:mysql://localhost:3306/ds1_slave1username: rootpassword:autoCommit: trueconnectionTimeout: 30000idleTimeout: 60000maxLifetime: 1800000maximumPoolSize: 65 shardingRule:  tables:t_order: actualDataNodes: ms_ds${0..1}.t_order${0..1}tableStrategy: inline:shardingColumn: order_idalgorithmExpression: t_order${order_id % 2}keyGeneratorColumnName: order_idt_order_item:actualDataNodes: ms_ds${0..1}.t_order_item${0..1}tableStrategy:inline:shardingColumn: order_idalgorithmExpression: t_order_item${order_id % 2}  bindingTables:- t_order,t_order_itembroadcastTables:- t_configdefaultDataSourceName: ds0defaultDatabaseStrategy:inline:shardingColumn: user_idalgorithmExpression: ms_ds${user_id % 2}defaultTableStrategy:none:defaultKeyGeneratorClassName: io.shardingsphere.core.keygen.DefaultKeyGeneratormasterSlaveRules:ms_ds0:masterDataSourceName: ds0slaveDataSourceNames:- ds0_slave0- ds0_slave1loadBalanceAlgorithmType: ROUND_ROBINconfigMap:master-slave-key0: master-slave-value0ms_ds1:masterDataSourceName: ds1slaveDataSourceNames: - ds1_slave0- ds1_slave1loadBalanceAlgorithmType: ROUND_ROBINconfigMap:master-slave-key1: master-slave-value1

全局配置示例

Sharding-Proxy使用conf/server.yaml配置注册中心、认证信息以及公用属性。

数据治理

#省略数据分片和读写分离配置orchestration:name: orchestration_dsoverwrite: trueregistry:namespace: orchestrationserverLists: localhost:2181认证信息
authentication:username: rootpassword:公用属性
props:executor.size: 16sql.show: false

数据源与分片配置项说明

数据分片

schemaName: #逻辑数据源名称dataSources: #数据源配置,可配置多个data_source_name: #与Sharding-JDBC配置不同,无需配置数据库连接池url: #数据库url连接username: #数据库用户名password: #数据库密码autoCommit: true #hikari连接池默认配置connectionTimeout: 30000 #hikari连接池默认配置idleTimeout: 60000 #hikari连接池默认配置maxLifetime: 1800000 #hikari连接池默认配置maximumPoolSize: 65 #hikari连接池默认配置shardingRule: #省略数据分片配置,与Sharding-JDBC配置一致

读写分离

schemaName: #逻辑数据源名称dataSources: #省略数据源配置,与数据分片一致masterSlaveRule: #省略读写分离配置,与Sharding-JDBC配置一致

全局配置项说明

数据治理

与Sharding-JDBC配置一致。

Proxy属性

#省略与Sharding-JDBC一致的配置属性
props:
acceptor.size: #用于设置接收客户端请求的工作线程个数,默认为CPU核数*2
proxy.transaction.enabled: #是否开启事务, 目前仅支持XA事务,默认为不开启
proxy.opentracing.enabled: #是否开启链路追踪功能,默认为不开启。详情请参见链路追踪

权限验证
用于执行登录Sharding Proxy的权限验证。配置用户名、密码后,必须使用正确的用户名、密码才可登录Proxy。
authentication:
username: root
password:

总结

摘自官方文档,所以非常繁琐,比较重复,大家看的时候理解一下,就好了。不同的对接模式,配置这是格式不一样,配置项基本上差不多。所以看懂一种就都一样了,数据分片、主从两种模式看懂就好了。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部