You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shardingsphere.apache.org by xia Yanick <ya...@gmail.com> on 2019/12/10 07:46:57 UTC

[Discuss] Shadow Database Configuration Yaml

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.



Re: [Discuss] Shadow Database Configuration Yaml

Posted by zhaojun <zh...@126.com>.
Hi, Yanick

I have got your first design, we can simplify it using a `shadow_` prefix convertion like this:

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:
	shadow_master_ds_0: !!com.zaxxer.hikari.HikariDataSource
	  driverClassName: org.h2.Driver
	  jdbcUrl: jdbc:h2:mem:shadow_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:
	shadow_master_ds_0_slave_0: !!com.zaxxer.hikari.HikariDataSource
	  driverClassName: org.h2.Driver
	  jdbcUrl: jdbc:h2:mem:shadow_master_ds_0_slave_0;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL
	  username: sa
	  password:

    ……..
    
    props:
  	shadow.enable: true

Sharding-core can group datasources internal based on this convertion, 
when user start a shadow switch, actual datasources could be routed to shadow group smoothly


------------------
Zhao Jun (cherrylzhao)
Apache ShardingSphere & ServiceComb

> On Dec 10, 2019, at 5:37 PM, xia Yanick <ya...@gmail.com> wrote:
> 
> 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: yanick.xia@gmail.com
> Website: blog.yanick.site
> 
> On Dec 10, 2019, 17:27 +0800, zhaojun <zh...@126.com>, 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 <ya...@gmail.com> 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.
>>> 
>>> 
>> 


Re: [Discuss] Shadow Database Configuration Yaml

Posted by xia Yanick <ya...@gmail.com>.
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: yanick.xia@gmail.com
Website: blog.yanick.site

On Dec 10, 2019, 17:27 +0800, zhaojun <zh...@126.com>, 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 <ya...@gmail.com> 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.
> >
> >
>

Re: [Discuss] Shadow Database Configuration Yaml

Posted by zhaojun <zh...@126.com>.
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 <ya...@gmail.com> 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.
> 
> 


回复: [Discuss] Shadow Database Configuration Yaml

Posted by CongXiang <23...@qq.com>.
is shadow database configuration exactly same as real database configuration? 
If it is same, or it may be same, there should have a simple way to configurate.
BTW, what is shadow database for? I mean what  shadow database’s purpose is?
I have read the mail before about shadow database ,but I don’t understand. 

发送自 Windows 10 版邮件应用

发件人: xia Yanick
发送时间: 2019年12月10日 15:47
收件人: dev@shardingsphere.apache.org
主题: [Discuss] Shadow Database Configuration Yaml

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.





回复: 回复: [Discuss] Shadow DatabaseConfiguration Yaml

Posted by CongXiang <23...@qq.com>.
Got it.Thanks.
Because of they are same, reduplicative configuration is not necessary , We just need to explicitly declare a property to enable or disable the shadow database


发送自 Windows 10 版邮件应用

发件人: xia Yanick
发送时间: 2019年12月10日 16:52
收件人: dev@shardingsphere.apache.org
主题: Re: 回复: [Discuss] Shadow DatabaseConfiguration Yaml

Dear Xiang:
 the purpose of shadow database for the  `End to End Test`, almost we want test the real system on the product environment, but nothing persistence to the real database. So we need a shadow database for the online database.
 I think sharing rule/ encrypt rule for shadow database is same to real database.




Yanick Xia
CODING BOY
Email: yanick.xia@gmail.com
Website: blog.yanick.site

On Dec 10, 2019, 16:40 +0800, CongXiang <23...@qq.com>, wrote:
> is shadow database configuration exactly same as real database configuration?
> If it is same, or it may be same, there should have a simple way to configurate.
> BTW, what is shadow database for? I mean what shadow database’s purpose is?
> I have read the mail before about shadow database ,but I don’t understand.
>
> 发送自 Windows 10 版邮件应用
>
> 发件人: xia Yanick
> 发送时间: 2019年12月10日 15:47
> 收件人: dev@shardingsphere.apache.org
> 主题: [Discuss] Shadow Database Configuration Yaml
>
> 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.
>
>
>
>



Re:回复: 回复: [Discuss] Shadow DatabaseConfiguration Yaml

Posted by xia Yanick <ya...@gmail.com>.
Right. The first way is simple, just add a configruation datasource. I got it

Yanick Xia
CODING BOY
Email: yanick.xia@gmail.com
Website: blog.yanick.site

On Dec 10, 2019, 17:20 +0800, CongXiang <23...@qq.com>, wrote:
> Got it.Thanks.
> Because of they are same, reduplicative configuration is not necessary , We just need to explicitly declare a property to enable or disable the shadow database
>
>
> 发送自 Windows 10 版邮件应用
>
> 发件人: xia Yanick
> 发送时间: 2019年12月10日 16:52
> 收件人: dev@shardingsphere.apache.org
> 主题: Re: 回复: [Discuss] Shadow DatabaseConfiguration Yaml
>
> Dear Xiang:
>  the purpose of shadow database for the  `End to End Test`, almost we want test the real system on the product environment, but nothing persistence to the real database. So we need a shadow database for the online database.
>  I think sharing rule/ encrypt rule for shadow database is same to real database.
>
>
>
>
> Yanick Xia
> CODING BOY
> Email: yanick.xia@gmail.com
> Website: blog.yanick.site
>
> On Dec 10, 2019, 16:40 +0800, CongXiang <23...@qq.com>, wrote:
> > is shadow database configuration exactly same as real database configuration?
> > If it is same, or it may be same, there should have a simple way to configurate.
> > BTW, what is shadow database for? I mean what shadow database’s purpose is?
> > I have read the mail before about shadow database ,but I don’t understand.
> >
> > 发送自 Windows 10 版邮件应用
> >
> > 发件人: xia Yanick
> > 发送时间: 2019年12月10日 15:47
> > 收件人: dev@shardingsphere.apache.org
> > 主题: [Discuss] Shadow Database Configuration Yaml
> >
> > 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.
> >
> >
> >
> >
>
>

Re: 回复: [Discuss] Shadow Database Configuration Yaml

Posted by xia Yanick <ya...@gmail.com>.
Dear Xiang:
 the purpose of shadow database for the  `End to End Test`, almost we want test the real system on the product environment, but nothing persistence to the real database. So we need a shadow database for the online database.
 I think sharing rule/ encrypt rule for shadow database is same to real database.




Yanick Xia
CODING BOY
Email: yanick.xia@gmail.com
Website: blog.yanick.site

On Dec 10, 2019, 16:40 +0800, CongXiang <23...@qq.com>, wrote:
> is shadow database configuration exactly same as real database configuration?
> If it is same, or it may be same, there should have a simple way to configurate.
> BTW, what is shadow database for? I mean what shadow database’s purpose is?
> I have read the mail before about shadow database ,but I don’t understand.
>
> 发送自 Windows 10 版邮件应用
>
> 发件人: xia Yanick
> 发送时间: 2019年12月10日 15:47
> 收件人: dev@shardingsphere.apache.org
> 主题: [Discuss] Shadow Database Configuration Yaml
>
> 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.
>
>
>
>