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