sharding-jdbc sub-tabla de sub-base de datos vertical combate real


  • Sub-biblioteca de datos Concepto y escenarios de aplicación de
    sub-biblioteca La sub-tabla detallada de la sub-biblioteca trajo algunos problemas
    entorno de sub-tabla de sub-biblioteca horizontal y vertical de
    sharding-jdbc para construir sub-tabla de sub-biblioteca de nivel de sharding-jdbc real
    sharding-jdbc sub-biblioteca sub-mesa de combate vertical

  • El propósito de la subtabla 1 de la subbase de datos vertical
    . La división de la estructura de la tabla maestro-esclavo también facilita el rendimiento del índice hasta cierto punto y, al mismo tiempo, permite que la tabla maestro-esclavo funcione simultáneamente sin estar restringida por filas. bloqueos (subtabla de tabla vertical)
    2. En el caso de la arquitectura de microservicio Para diferenciar mejor el negocio, se adopta el modo multi-esquema, y ​​los diferentes módulos utilizan esquemas diferentes (sub-biblioteca pseudo vertical)
    3.En el caso de la arquitectura de microservicio, debido al gran volumen de negocios de algunos módulos, el rendimiento de la biblioteca única se reduce, lo que afecta a otros Módulos, generalmente separados en otra biblioteca (verdadera subbiblioteca vertical)

  • La realización de
    sub-tablas verticales, sub-tablas verticales no hacemos experimentos, estamos haciendo sub-tablas verticales todos los días, como la estructura de la tabla maestro-esclavo.

  • Realización 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());
        }
    }
    
    
  • Efecto de sub-biblioteca vertical
    Inserte la descripción de la imagen aquí
    Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_38312719/article/details/109139316
Recomendado
Clasificación