sharding-jdbc sous-table de sous-base de données verticale combat réel


  • Concept de sous-table de sous-bibliothèque de données et scénarios d'application La sous-table détaillée de
    sous-bibliothèque a posé quelques problèmes
    Environnement de sous-table de sous-bibliothèque horizontale et verticale
    sharding-jdbc pour créer une sous-table de sous-bibliothèque de niveau sharding-jdbc real
    sharding-jdbc combat vertical sous-bibliothèque sous-table

  • Le but de la sous-table verticale de la sous-base de données
    1. La division de la structure de la table maître-esclave facilite également les performances de l'index dans une certaine mesure, et permet en même temps à la table maître-esclave de fonctionner simultanément sans être restreinte par la ligne verrous (sous-tableau de table verticale)
    2. Dans le cas d'une architecture de microservices Afin de mieux différencier l'entreprise, le mode multi-schémas est adopté, et différents modules utilisent des schémas différents (pseudo sous-bibliothèque verticale)
    3. Dans le cas d'architecture de micro-services, en raison du volume d'activité très important de certains modules, les performances de la bibliothèque unique sont réduites, ce qui affecte d'autres modules, généralement séparés dans une autre bibliothèque (véritable sous-bibliothèque verticale)

  • La réalisation de
    sous-tables verticales, de sous-tables verticales ne fait pas d'expérimentation, nous faisons des sous-tables verticales tous les jours, comme la structure de la table maître-esclave

  • Réalisation de sous-bibliothèque verticale

    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());
        }
    }
    
    
  • Effet de sous-bibliothèque verticale
    Insérez la description de l'image ici
    Insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/weixin_38312719/article/details/109139316
conseillé
Classement