Sharding-JDBC系列
- Sharding-JDBC 核心組件介紹
- Sharding-JDBC 配置分析
- Sharding-JDBC 執(zhí)行整體流程
- Sharding-JDBC 分庫配置解析過程
- Sharding-JDBC 分表配置解析過程
- Sharding-JDBC 分庫分表配置解析過程
數(shù)據(jù)分片配置解析流程
ShardingRule創(chuàng)建流程
public class ShardingRule implements BaseRule {
private final ShardingRuleConfiguration ruleConfiguration;
private final ShardingDataSourceNames shardingDataSourceNames;
private final Collection<TableRule> tableRules;
private final Collection<BindingTableRule> bindingTableRules;
private final Collection<String> broadcastTables;
private final ShardingStrategy defaultDatabaseShardingStrategy;
private final ShardingStrategy defaultTableShardingStrategy;
private final ShardingKeyGenerator defaultShardingKeyGenerator;
private final Collection<MasterSlaveRule> masterSlaveRules;
private final EncryptRule encryptRule;
public ShardingRule(final ShardingRuleConfiguration shardingRuleConfig, final Collection<String> dataSourceNames) {
Preconditions.checkArgument(null != shardingRuleConfig, "ShardingRuleConfig cannot be null.");
Preconditions.checkArgument(null != dataSourceNames && !dataSourceNames.isEmpty(), "Data sources cannot be empty.");
this.ruleConfiguration = shardingRuleConfig;
shardingDataSourceNames = new ShardingDataSourceNames(shardingRuleConfig, dataSourceNames);
// 1、創(chuàng)建tableRules
tableRules = createTableRules(shardingRuleConfig);
broadcastTables = shardingRuleConfig.getBroadcastTables();
// 2、創(chuàng)建bindingTableRules
bindingTableRules = createBindingTableRules(shardingRuleConfig.getBindingTableGroups());
defaultDatabaseShardingStrategy = createDefaultShardingStrategy(shardingRuleConfig.getDefaultDatabaseShardingStrategyConfig());
defaultTableShardingStrategy = createDefaultShardingStrategy(shardingRuleConfig.getDefaultTableShardingStrategyConfig());
defaultShardingKeyGenerator = createDefaultKeyGenerator(shardingRuleConfig.getDefaultKeyGeneratorConfig());
// 3、創(chuàng)建masterSlaveRules
masterSlaveRules = createMasterSlaveRules(shardingRuleConfig.getMasterSlaveRuleConfigs());
encryptRule = createEncryptRule(shardingRuleConfig.getEncryptRuleConfig());
}
}
- 負(fù)責(zé)解析ShardingRuleConfiguration生成ShardingRule。
- createTableRules負(fù)責(zé)創(chuàng)建創(chuàng)建tableRules。
- createBindingTableRules負(fù)責(zé)創(chuàng)建bindingTableRules。
- createMasterSlaveRules負(fù)責(zé)創(chuàng)建masterSlaveRules。
RuleConfiguration
@Getter
@Setter
public final class ShardingRuleConfiguration implements RuleConfiguration {
// 表規(guī)則配置
private Collection<TableRuleConfiguration> tableRuleConfigs = new LinkedList<>();
// 相同表分片規(guī)則的組,如果表分片規(guī)則相同,則可以放在一個(gè)組里。
private Collection<String> bindingTableGroups = new LinkedList<>();
// 廣播的表
private Collection<String> broadcastTables = new LinkedList<>();
// 默認(rèn)數(shù)據(jù)源名稱
private String defaultDataSourceName;
// 默認(rèn)數(shù)據(jù)庫的分片算法配置
private ShardingStrategyConfiguration defaultDatabaseShardingStrategyConfig;
// 默認(rèn)表的分片算法配置
private ShardingStrategyConfiguration defaultTableShardingStrategyConfig;
// 自動(dòng)生成鍵的配置
private KeyGeneratorConfiguration defaultKeyGeneratorConfig;
// 主備配置信息
private Collection<MasterSlaveRuleConfiguration> masterSlaveRuleConfigs = new LinkedList<>();
// 加密配置規(guī)則
private EncryptRuleConfiguration encryptRuleConfig;
}
@Getter
@Setter
public final class TableRuleConfiguration {
// 邏輯表名
private final String logicTable;
// 實(shí)際物理的表,按照dataBase+table的維度
private final String actualDataNodes;
// database的分片策略
private ShardingStrategyConfiguration databaseShardingStrategyConfig;
// table的分片的策略
private ShardingStrategyConfiguration tableShardingStrategyConfig;
// 自動(dòng)生成鍵的配置
private KeyGeneratorConfiguration keyGeneratorConfig;
public TableRuleConfiguration(final String logicTable) {
this(logicTable, null);
}
public TableRuleConfiguration(final String logicTable, final String actualDataNodes) {
Preconditions.checkArgument(!Strings.isNullOrEmpty(logicTable), "LogicTable is required.");
this.logicTable = logicTable;
this.actualDataNodes = actualDataNodes;
}
}
@Getter
public class MasterSlaveRuleConfiguration implements RuleConfiguration {
// 名稱
private final String name;
// 主數(shù)據(jù)源
private final String masterDataSourceName;
// 從數(shù)據(jù)源
private final List<String> slaveDataSourceNames;
// 負(fù)載均衡算法
private final LoadBalanceStrategyConfiguration loadBalanceStrategyConfiguration;
}
- 各類Rule的創(chuàng)建依據(jù)的是RuleConfiguration,目前主要由ShardingRuleConfiguration、TableRuleConfiguration、MasterSlaveRuleConfiguration。
- ShardingRuleConfiguration是整體的規(guī)則配置。
- TableRuleConfiguration是表的規(guī)則配置,核心變量是logicTable和actualDataNodes。
- MasterSlaveRuleConfiguration是主從的配置。
TableRule創(chuàng)建流程
public class ShardingRule implements BaseRule {
private Collection<TableRule> createTableRules(final ShardingRuleConfiguration shardingRuleConfig) {
Collection<TableRuleConfiguration> tableRuleConfigurations = shardingRuleConfig.getTableRuleConfigs();
Collection<TableRule> result = new ArrayList<>(tableRuleConfigurations.size());
// 遍歷tableRuleConfigurations生成TableRule
for (TableRuleConfiguration each : tableRuleConfigurations) {
// 針對(duì)每個(gè)TableRuleConfiguration來生成TableRule
// 指定shardingDataSourceNames為DataSource的名稱
result.add(new TableRule(each, shardingDataSourceNames, getDefaultGenerateKeyColumn(shardingRuleConfig)));
}
return result;
}
}
@Getter
@ToString(exclude = {"dataNodeIndexMap", "actualTables", "actualDatasourceNames", "datasourceToTablesMap"})
public final class TableRule {
public TableRule(final TableRuleConfiguration tableRuleConfig, final ShardingDataSourceNames shardingDataSourceNames, final String defaultGenerateKeyColumn) {
// 邏輯表名
logicTable = tableRuleConfig.getLogicTable().toLowerCase();
// 通過splitAndEvaluate針對(duì)實(shí)際的dataNodes會(huì)根據(jù)配置進(jìn)行實(shí)際解析
List<String> dataNodes = new InlineExpressionParser(tableRuleConfig.getActualDataNodes()).splitAndEvaluate();
dataNodeIndexMap = new HashMap<>(dataNodes.size(), 1);
// actualDataNodes會(huì)建立dataSource和logic表的關(guān)系
actualDataNodes = isEmptyDataNodes(dataNodes)
? generateDataNodes(tableRuleConfig.getLogicTable(), shardingDataSourceNames.getDataSourceNames()) : generateDataNodes(dataNodes, shardingDataSourceNames.getDataSourceNames());
actualTables = getActualTables();
databaseShardingStrategy = null == tableRuleConfig.getDatabaseShardingStrategyConfig() ? null : ShardingStrategyFactory.newInstance(tableRuleConfig.getDatabaseShardingStrategyConfig());
tableShardingStrategy = null == tableRuleConfig.getTableShardingStrategyConfig() ? null : ShardingStrategyFactory.newInstance(tableRuleConfig.getTableShardingStrategyConfig());
generateKeyColumn = getGenerateKeyColumn(tableRuleConfig.getKeyGeneratorConfig(), defaultGenerateKeyColumn);
shardingKeyGenerator = containsKeyGeneratorConfiguration(tableRuleConfig)
? new ShardingKeyGeneratorServiceLoader().newService(tableRuleConfig.getKeyGeneratorConfig().getType(), tableRuleConfig.getKeyGeneratorConfig().getProperties()) : null;
checkRule(dataNodes);
}
private List<DataNode> generateDataNodes(final String logicTable, final Collection<String> dataSourceNames) {
List<DataNode> result = new LinkedList<>();
int index = 0;
for (String each : dataSourceNames) {
DataNode dataNode = new DataNode(each, logicTable);
result.add(dataNode);
dataNodeIndexMap.put(dataNode, index);
actualDatasourceNames.add(each);
addActualTable(dataNode.getDataSourceName(), dataNode.getTableName());
index++;
}
return result;
}
}
public final class DataNode {
private static final String DELIMITER = ".";
private final String dataSourceName;
private final String tableName;
}
- TableRule的是依據(jù)TableRuleConfiguration來進(jìn)行創(chuàng)建。
- TableRule的logicTable直接獲取TableRuleConfiguration的邏輯表名。
- TableRule的actualDataNodes會(huì)解析TableRuleConfiguration的ActualDataNodes生成最細(xì)粒度的數(shù)據(jù)節(jié)點(diǎn)。
BindingTableRule創(chuàng)建流程
public class ShardingRule implements BaseRule {
private Collection<BindingTableRule> createBindingTableRules(final Collection<String> bindingTableGroups) {
Collection<BindingTableRule> result = new ArrayList<>(bindingTableGroups.size());
for (String each : bindingTableGroups) {
result.add(createBindingTableRule(each));
}
return result;
}
private BindingTableRule createBindingTableRule(final String bindingTableGroup) {
List<TableRule> tableRules = new LinkedList<>();
for (String each : Splitter.on(",").trimResults().splitToList(bindingTableGroup)) {
tableRules.add(getTableRule(each));
}
return new BindingTableRule(tableRules);
}
}
@RequiredArgsConstructor
@Getter
public final class BindingTableRule {
private final List<TableRule> tableRules;
}
- BindingTableRule的創(chuàng)建會(huì)使用逗號(hào)分割bindingTableGroups的字符串。
MasterSlaveRule創(chuàng)建流程
public class ShardingRule implements BaseRule {
private Collection<MasterSlaveRule> createMasterSlaveRules(final Collection<MasterSlaveRuleConfiguration> masterSlaveRuleConfigurations) {
Collection<MasterSlaveRule> result = new ArrayList<>(masterSlaveRuleConfigurations.size());
for (MasterSlaveRuleConfiguration each : masterSlaveRuleConfigurations) {
result.add(new MasterSlaveRule(each));
}
return result;
}
}
@Getter
public class MasterSlaveRule implements BaseRule {
private final String name;
private final String masterDataSourceName;
private final List<String> slaveDataSourceNames;
private final MasterSlaveLoadBalanceAlgorithm loadBalanceAlgorithm;
private final MasterSlaveRuleConfiguration ruleConfiguration;
public MasterSlaveRule(final MasterSlaveRuleConfiguration config) {
name = config.getName();
masterDataSourceName = config.getMasterDataSourceName();
slaveDataSourceNames = config.getSlaveDataSourceNames();
loadBalanceAlgorithm = createMasterSlaveLoadBalanceAlgorithm(config.getLoadBalanceStrategyConfiguration());
ruleConfiguration = config;
}
}
- MasterSlaveRule的參數(shù)全部來自MasterSlaveRuleConfiguration的解析。
- MasterSlaveRule的masterDataSourceName為主節(jié)點(diǎn)的配置。
- MasterSlaveRule的slaveDataSourceNames為從節(jié)點(diǎn)的配置。
分表的配置解析
ShardingRuleConfiguration
public final class ShardingTablesConfigurationPrecise implements ExampleConfiguration {
@Override
public DataSource getDataSource() throws SQLException {
// 1、創(chuàng)建ShardingRuleConfiguration對(duì)象
ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
// 2、綁定TableRuleConfiguration的對(duì)象
shardingRuleConfig.getTableRuleConfigs().add(getOrderTableRuleConfiguration());
// 3、綁定TableRuleConfiguration的對(duì)象
shardingRuleConfig.getTableRuleConfigs().add(getOrderItemTableRuleConfiguration());
// 4、綁定BindingTable
shardingRuleConfig.getBindingTableGroups().add("t_order, t_order_item");
// 5、綁定BroadcastTables
shardingRuleConfig.getBroadcastTables().add("t_address");
// 6、綁定默認(rèn)分片策略
shardingRuleConfig.setDefaultTableShardingStrategyConfig(new StandardShardingStrategyConfiguration("order_id", new PreciseModuloShardingTableAlgorithm()));
return ShardingDataSourceFactory.createDataSource(createDataSourceMap(), shardingRuleConfig, new Properties());
}
private static TableRuleConfiguration getOrderTableRuleConfiguration() {
TableRuleConfiguration result = new TableRuleConfiguration("t_order", "demo_ds.t_order_${[0, 1]}");
result.setKeyGeneratorConfig(new KeyGeneratorConfiguration("SNOWFLAKE", "order_id", getProperties()));
return result;
}
private static TableRuleConfiguration getOrderItemTableRuleConfiguration() {
TableRuleConfiguration result = new TableRuleConfiguration("t_order_item", "demo_ds.t_order_item_${[0, 1]}");
result.setKeyGeneratorConfig(new KeyGeneratorConfiguration("SNOWFLAKE", "order_item_id", getProperties()));
return result;
}
private static Map<String, DataSource> createDataSourceMap() {
Map<String, DataSource> result = new HashMap<>();
result.put("demo_ds", DataSourceUtil.createDataSource("demo_ds"));
return result;
}
private static Properties getProperties() {
Properties result = new Properties();
result.setProperty("worker.id", "123");
return result;
}
}
- java硬編碼的分表配置的邏輯代碼。

ShardingRuleConfiguration
- 分表的配置展示。
{
"bindingTableGroups": ["t_order, t_order_item"],
"broadcastTables": ["t_address"],
"defaultTableShardingStrategyConfig": {
"preciseShardingAlgorithm": {},
"shardingColumn": "order_id"
},
"masterSlaveRuleConfigs": [],
"tableRuleConfigs": [{
"actualDataNodes": "demo_ds.t_order_${[0, 1]}",
"keyGeneratorConfig": {
"column": "order_id",
"properties": {
"worker.id": "123"
},
"type": "SNOWFLAKE"
},
"logicTable": "t_order"
}, {
"actualDataNodes": "demo_ds.t_order_item_${[0, 1]}",
"keyGeneratorConfig": {
"column": "order_item_id",
"properties": {
"worker.id": "123"
},
"type": "SNOWFLAKE"
},
"logicTable": "t_order_item"
}]
}
- 分表的配置的JSON呈現(xiàn)。
ShardingRule

ShardingRule
- 分表配置解析生成的ShardingRule,核心在于actualDataNodes的生成。
- demo_ds.t_order_${[0, 1]}最終會(huì)變成demo_ds.t_order_0 和 demo_ds.t_order_1。
分庫分表配置解析
ShardingRuleConfiguration
public final class ShardingDatabasesAndTablesConfigurationPrecise implements ExampleConfiguration {
@Override
public 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_address");
shardingRuleConfig.setDefaultDatabaseShardingStrategyConfig(new InlineShardingStrategyConfiguration("user_id", "demo_ds_${user_id % 2}"));
shardingRuleConfig.setDefaultTableShardingStrategyConfig(new StandardShardingStrategyConfiguration("order_id", new PreciseModuloShardingTableAlgorithm()));
return ShardingDataSourceFactory.createDataSource(createDataSourceMap(), shardingRuleConfig, new Properties());
}
private static TableRuleConfiguration getOrderTableRuleConfiguration() {
TableRuleConfiguration result = new TableRuleConfiguration("t_order", "demo_ds_${0..1}.t_order_${[0, 1]}");
result.setKeyGeneratorConfig(new KeyGeneratorConfiguration("SNOWFLAKE", "order_id", getProperties()));
return result;
}
private static TableRuleConfiguration getOrderItemTableRuleConfiguration() {
TableRuleConfiguration result = new TableRuleConfiguration("t_order_item", "demo_ds_${0..1}.t_order_item_${[0, 1]}");
result.setKeyGeneratorConfig(new KeyGeneratorConfiguration("SNOWFLAKE", "order_item_id", getProperties()));
return result;
}
private static Map<String, DataSource> createDataSourceMap() {
Map<String, DataSource> result = new HashMap<>();
result.put("demo_ds_0", DataSourceUtil.createDataSource("demo_ds_0"));
result.put("demo_ds_1", DataSourceUtil.createDataSource("demo_ds_1"));
return result;
}
private static Properties getProperties() {
Properties result = new Properties();
result.setProperty("worker.id", "123");
return result;
}
}
- java硬編碼的分庫分表的邏輯代碼。

ShardingRuleConfiguration
- 分庫分表的配置展示。
{
"bindingTableGroups": ["t_order, t_order_item"],
"broadcastTables": ["t_address"],
"defaultDatabaseShardingStrategyConfig": {
"algorithmExpression": "demo_ds_${user_id % 2}",
"shardingColumn": "user_id"
},
"defaultTableShardingStrategyConfig": {
"preciseShardingAlgorithm": {},
"shardingColumn": "order_id"
},
"masterSlaveRuleConfigs": [],
"tableRuleConfigs": [{
"actualDataNodes": "demo_ds_${0..1}.t_order_${[0, 1]}",
"keyGeneratorConfig": {
"column": "order_id",
"properties": {
"worker.id": "123"
},
"type": "SNOWFLAKE"
},
"logicTable": "t_order"
}, {
"actualDataNodes": "demo_ds_${0..1}.t_order_item_${[0, 1]}",
"keyGeneratorConfig": {
"column": "order_item_id",
"properties": {
"worker.id": "123"
},
"type": "SNOWFLAKE"
},
"logicTable": "t_order_item"
}]
}
- 分庫分表的數(shù)據(jù)格式JSON呈現(xiàn)。
- 分庫分表的demo_ds和t_order_item表明兩個(gè)庫和兩個(gè)表合計(jì)2*2=4個(gè)實(shí)際數(shù)據(jù)節(jié)點(diǎn)。
ShardingRule

ShardingRule
- 分庫分表生成的ShardingRule,核心在于actualDataNodes的生成。
- 核心的actualDataNodes已經(jīng)按照庫表維度進(jìn)行了拆分。
主從配置解析
MasterSlaveConfiguration
public final class MasterSlaveConfiguration implements ExampleConfiguration {
@Override
public DataSource getDataSource() throws SQLException {
MasterSlaveRuleConfiguration masterSlaveRuleConfig = new MasterSlaveRuleConfiguration("demo_ds_master_slave", "demo_ds_master", Arrays.asList("demo_ds_slave_0", "demo_ds_slave_1"));
return MasterSlaveDataSourceFactory.createDataSource(createDataSourceMap(), masterSlaveRuleConfig, new Properties());
}
private Map<String, DataSource> createDataSourceMap() {
Map<String, DataSource> result = new HashMap<>();
result.put("demo_ds_master", DataSourceUtil.createDataSource("demo_ds_master"));
result.put("demo_ds_slave_0", DataSourceUtil.createDataSource("demo_ds_slave_0"));
result.put("demo_ds_slave_1", DataSourceUtil.createDataSource("demo_ds_slave_1"));
return result;
}
}
- java硬編碼的主從配置的邏輯代碼。

MasterSlaveConfiguration
- 主從的配置展示。
{
"masterDataSourceName": "demo_ds_master",
"name": "demo_ds_master_slave",
"slaveDataSourceNames": ["demo_ds_slave_0", "demo_ds_slave_1"]
}
- 主從配置的數(shù)據(jù)格式JSON呈現(xiàn)。
MasterSlaveRule

MasterSlaveRule
- 主從生成的ShardingRule。
分片的主從配置
ShardingRuleConfiguration
public final class ShardingMasterSlaveConfigurationPrecise implements ExampleConfiguration {
@Override
public 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_address");
shardingRuleConfig.setDefaultDatabaseShardingStrategyConfig(new StandardShardingStrategyConfiguration("user_id", new PreciseModuloShardingDatabaseAlgorithm()));
shardingRuleConfig.setDefaultTableShardingStrategyConfig(new StandardShardingStrategyConfiguration("order_id", new PreciseModuloShardingTableAlgorithm()));
shardingRuleConfig.setMasterSlaveRuleConfigs(getMasterSlaveRuleConfigurations());
return ShardingDataSourceFactory.createDataSource(createDataSourceMap(), shardingRuleConfig, new Properties());
}
private static TableRuleConfiguration getOrderTableRuleConfiguration() {
TableRuleConfiguration result = new TableRuleConfiguration("t_order", "ds_${0..1}.t_order_${[0, 1]}");
result.setKeyGeneratorConfig(new KeyGeneratorConfiguration("SNOWFLAKE", "order_id", getProperties()));
return result;
}
private static TableRuleConfiguration getOrderItemTableRuleConfiguration() {
TableRuleConfiguration result = new TableRuleConfiguration("t_order_item", "ds_${0..1}.t_order_item_${[0, 1]}");
result.setKeyGeneratorConfig(new KeyGeneratorConfiguration("SNOWFLAKE", "order_item_id", getProperties()));
return result;
}
private static List<MasterSlaveRuleConfiguration> 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);
}
private static Map<String, DataSource> createDataSourceMap() {
final Map<String, DataSource> 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;
}
private static Properties getProperties() {
Properties result = new Properties();
result.setProperty("worker.id", "123");
return result;
}
}
- java硬編碼的分片主從配置的邏輯代碼。

ShardingRuleConfiguration
- 分片主從的配置展示。
{
"bindingTableGroups": ["t_order, t_order_item"],
"broadcastTables": ["t_address"],
"defaultDatabaseShardingStrategyConfig": {
"preciseShardingAlgorithm": {},
"shardingColumn": "user_id"
},
"defaultTableShardingStrategyConfig": {
"preciseShardingAlgorithm": {},
"shardingColumn": "order_id"
},
"masterSlaveRuleConfigs": [{
"masterDataSourceName": "demo_ds_master_0",
"name": "ds_0",
"slaveDataSourceNames": ["demo_ds_master_0_slave_0", "demo_ds_master_0_slave_1"]
}, {
"masterDataSourceName": "demo_ds_master_1",
"name": "ds_1",
"slaveDataSourceNames": ["demo_ds_master_1_slave_0", "demo_ds_master_1_slave_1"]
}],
"tableRuleConfigs": [{
"actualDataNodes": "ds_${0..1}.t_order_${[0, 1]}",
"keyGeneratorConfig": {
"column": "order_id",
"properties": {
"worker.id": "123"
},
"type": "SNOWFLAKE"
},
"logicTable": "t_order"
}, {
"actualDataNodes": "ds_${0..1}.t_order_item_${[0, 1]}",
"keyGeneratorConfig": {
"column": "order_item_id",
"properties": {
"worker.id": "123"
},
"type": "SNOWFLAKE"
},
"logicTable": "t_order_item"
}]
}
- 分片主從配置的數(shù)據(jù)格式JSON呈現(xiàn)。
ShardingRule

ShardingRule
- 分片主從生成的ShardingRule。