-
Conceito de subtabela de sub-biblioteca de dados e cenários de aplicação Subtabela de
sub-biblioteca detalhada trouxe alguns problemas
sharding-jdbc ambiente de sub-tabela de sub-biblioteca horizontal e vertical para construir
subtabela de sub-biblioteca de nível de sharding-jdbc real
sharding-jdbc sub-biblioteca subtabela combate vertical -
O propósito da sub-tabela vertical do sub-banco de dados
1. A divisão da estrutura da tabela mestre-escravo também facilita o desempenho do índice até certo ponto e, ao mesmo tempo, permite que a tabela mestre-escravo opere simultaneamente sem ser restringida por linha bloqueios (subtabela de tabela vertical)
2. No caso de arquitetura de microsserviço Para melhor diferenciar o negócio, o modo multi-esquema é adotado, e diferentes módulos usam esquemas diferentes (sub-biblioteca pseudo-vertical)
3.No caso de arquitetura de micro-serviços, devido ao grande volume de negócios de alguns módulos, o desempenho de uma única biblioteca é reduzido, o que afeta outros Módulos, geralmente separados em outra biblioteca (verdadeira sub-biblioteca vertical) -
A realização de
subtabelas verticais, subtabelas verticais não fazemos experimentos, estamos fazendo subtabelas verticais todos os dias, como a estrutura da tabela mestre-escravo -
Realização de sub-biblioteca vertical
public class springJdbcTest { public static void main(String[] args) throws SQLException { //获取数据源 DataSource dataSource = getDataSource(); //获取jdbctemplate JdbcTemplate jdbcTemplate = getJdbcTemplate(dataSource); //执行插入语句 for(int i=1;i<=10;i++) { //执行插入用户语句 jdbcTemplate.update("insert into t_user(user_name,user_age,user_type) values (?,?,?)",i,i,i); //执行插入订单语句 jdbcTemplate.update("insert into t_order(user_id,order_price) values (?,?)",i,i); } } public static JdbcTemplate getJdbcTemplate( DataSource dataSource){ JdbcTemplate jdbcTemplate = new JdbcTemplate(); jdbcTemplate.setDataSource(dataSource); return jdbcTemplate; } public static DataSource getDataSource() throws SQLException { // 配置真实数据源 Map<String, DataSource> dataSourceMap = new HashMap<>(); // 配置第 1 个数据源 DruidDataSource dataSource1 = new DruidDataSource(); dataSource1.setDriverClassName("com.mysql.jdbc.Driver"); dataSource1.setUrl("jdbc:mysql://localhost:3306/ds0?characterEncoding=utf-8&useSSL=false"); dataSource1.setUsername("root"); dataSource1.setPassword("123456"); dataSourceMap.put("ds0", dataSource1); // 配置第 2 个数据源 DruidDataSource dataSource2 = new DruidDataSource(); dataSource2.setDriverClassName("com.mysql.jdbc.Driver"); dataSource2.setUrl("jdbc:mysql://localhost:3307/ds0?characterEncoding=utf-8&useSSL=false"); dataSource2.setUsername("root"); dataSource2.setPassword("123456"); dataSourceMap.put("ds1", dataSource2); // 配置表规则 ShardingRuleConfiguration shardingRuleConfiguration=new ShardingRuleConfiguration(); //用户表配置 //配置逻辑表和实际表分布情况,配置用户表分布情况 TableRuleConfiguration tableRuleConfiguration1 = new TableRuleConfiguration("t_user","ds0.t_user"); //生成主键策略 KeyGeneratorConfiguration keyGeneratorConfiguration1 = new KeyGeneratorConfiguration("snowflake","user_id"); //用户表的表和库路由配置,都是单库单表情况,相当于多数据源情况,库和表都是固定 ShardingStrategyConfiguration shardingStrategyConfiguration1 = new InlineShardingStrategyConfiguration("user_id","t_user"); ShardingStrategyConfiguration shardingStrategyConfiguration2 = new InlineShardingStrategyConfiguration("user_id","ds0"); tableRuleConfiguration1.setKeyGeneratorConfig(keyGeneratorConfiguration1); tableRuleConfiguration1.setTableShardingStrategyConfig(shardingStrategyConfiguration1); tableRuleConfiguration1.setDatabaseShardingStrategyConfig(shardingStrategyConfiguration2); //订单表配置 //配置逻辑表和实际表分布情况,配置订单表分布情况 TableRuleConfiguration tableRuleConfiguration2 = new TableRuleConfiguration("t_order","ds1.t_order"); //生成主键策略 KeyGeneratorConfiguration keyGeneratorConfiguration2 = new KeyGeneratorConfiguration("snowflake","order_id"); //订单表的表和库路由配置,都是单库单表情况,相当于多数据源情况,库和表都是固定 ShardingStrategyConfiguration shardingStrategyConfiguration3 = new InlineShardingStrategyConfiguration("order_id","t_order"); ShardingStrategyConfiguration shardingStrategyConfiguration4 = new InlineShardingStrategyConfiguration("order_id","ds1"); tableRuleConfiguration2.setKeyGeneratorConfig(keyGeneratorConfiguration2); tableRuleConfiguration2.setTableShardingStrategyConfig(shardingStrategyConfiguration3); tableRuleConfiguration2.setDatabaseShardingStrategyConfig(shardingStrategyConfiguration4); //实际表生成主键策略 shardingRuleConfiguration.setTableRuleConfigs(Arrays.asList(tableRuleConfiguration1,tableRuleConfiguration2)); return ShardingDataSourceFactory.createDataSource(dataSourceMap, shardingRuleConfiguration, new Properties()); } }
-
Efeito de sub-biblioteca vertical
sharding-jdbc sub-banco de dados vertical subtabela combate real
Acho que você gosta
Origin blog.csdn.net/weixin_38312719/article/details/109139316
Recomendado
Clasificación