Dear Jun: Great idea, the first way that add the datasources for shadow rule easy to implement, if we add a new concepts for `datasource group` may add other compatibility code for ShardingRule/MasterRule/EncRule.
Yanick Xia CODING BOY Email: [email protected] Website: blog.yanick.site On Dec 10, 2019, 17:27 +0800, zhaojun <[email protected]>, wrote: > It seems difficult to understand, shall we create datasource groups > distinguished with > actual and shadow then rewrite the actualDataNodes based on shadow switch > configuration? > > ------------------ > Zhao Jun (cherrylzhao) > Apache Sharding-Sphere & ServiceComb > > > On Dec 10, 2019, at 3:46 PM, xia Yanick <[email protected]> wrote: > > > > Hi everyone: > > we will add shadow yaml configuration file > > the first style: add shadow database for every actual database , such as: > > > > # shadow config > > dataSources: > > master_ds_0: !!com.zaxxer.hikari.HikariDataSource > > driverClassName: org.h2.Driver > > jdbcUrl: > > jdbc:h2:mem:master_ds_0;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL > > username: sa > > password: > > master_ds_0_slave_0: !!com.zaxxer.hikari.HikariDataSource > > driverClassName: org.h2.Driver > > jdbcUrl: > > jdbc:h2:mem:master_ds_0_slave_0;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL > > username: sa > > password: > > shadowRule: > > shadowDataSources: # the shadow database, one to one mapping > > master_ds_0: !!com.zaxxer.hikari.HikariDataSource > > driverClassName: org.h2.Driver > > jdbcUrl: > > jdbc:h2:mem:master_ds_0;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL > > username: sa > > password: > > master_ds_0_slave_0: !!com.zaxxer.hikari.HikariDataSource > > driverClassName: org.h2.Driver > > jdbcUrl: > > jdbc:h2:mem:master_ds_0_slave_0;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL > > username: sa > > This way, require that every shadowDatasource map key mapping one of actual > > datasources item key. > > > > > > the other way: add copy configuration for shadow rule > > # shadow config > > dataSources: > > master_ds_0: !!com.zaxxer.hikari.HikariDataSource > > driverClassName: org.h2.Driver > > jdbcUrl: > > jdbc:h2:mem:master_ds_0;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL > > username: sa > > password: > > master_ds_0_slave_0: !!com.zaxxer.hikari.HikariDataSource > > driverClassName: org.h2.Driver > > jdbcUrl: > > jdbc:h2:mem:master_ds_0_slave_0;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL > > username: sa > > password: > > > > shardingRule: > > tables: > > t_user: > > actualDataNodes: ds_${0..1}.t_user_${0..15} > > databaseStrategy: > > complex: > > shardingColumns: region_id, user_id > > algorithmClassName: TestDatabaseComplexAlgorithmClassName > > tableStrategy: > > complex: > > shardingColumns: region_id, user_id > > algorithmClassName: TestTableComplexAlgorithmClassName > > bindingTables: > > - t_order, t_order_item > > broadcastTables: > > - t_config > > defaultDataSourceName: default_ds > > defaultDatabaseStrategy: > > inline: > > shardingColumn: order_id > > algorithmExpression: ds_${order_id % 2} > > defaultTableStrategy: > > none: > > masterSlaveRules: > > ds_0: > > masterDataSourceName: master_ds_0 > > slaveDataSourceNames: > > - master_ds_0_slave_0 > > - master_ds_0_slave_1 > > loadBalanceAlgorithmType: ROUND_ROBIN > > ds_1: > > masterDataSourceName: master_ds_1 > > slaveDataSourceNames: > > - master_ds_1_slave_0 > > - master_ds_1_slave_1 > > loadBalanceAlgorithmType: RANDOM > > shadowRule: # shadow rule > > column: is_shadow > > value: true > > dataSources: > > master_ds_0: !!com.zaxxer.hikari.HikariDataSource > > driverClassName: org.h2.Driver > > jdbcUrl: > > jdbc:h2:mem:master_ds_0;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL > > username: sa > > password: > > master_ds_0_slave_0: !!com.zaxxer.hikari.HikariDataSource > > driverClassName: org.h2.Driver > > jdbcUrl: > > jdbc:h2:mem:master_ds_0_slave_0;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL > > username: sa > > password: > > shardingRule: > > tables: > > t_user: > > actualDataNodes: ds_${0..1}.t_user_${0..15} > > databaseStrategy: > > complex: > > shardingColumns: region_id, user_id > > algorithmClassName: TestDatabaseComplexAlgorithmClassName > > tableStrategy: > > complex: > > shardingColumns: region_id, user_id > > algorithmClassName: TestTableComplexAlgorithmClassName > > bindingTables: > > - t_order, t_order_item > > broadcastTables: > > - t_config > > defaultDataSourceName: default_ds > > defaultDatabaseStrategy: > > inline: > > shardingColumn: order_id > > algorithmExpression: ds_${order_id % 2} > > defaultTableStrategy: > > none: > > masterSlaveRules: > > ds_0: > > masterDataSourceName: master_ds_0 > > slaveDataSourceNames: > > - master_ds_0_slave_0 > > - master_ds_0_slave_1 > > loadBalanceAlgorithmType: ROUND_ROBIN > > ds_1: > > masterDataSourceName: master_ds_1 > > slaveDataSourceNames: > > - master_ds_1_slave_0 > > - master_ds_1_slave_1 > > loadBalanceAlgorithmType: RANDOM > > > > props: > > sql.show: true > > This way will has something verbose config rule. > > > > >
