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.
> >
> >
>

Reply via email to