You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shardingsphere.apache.org by CongXiang <23...@qq.com> on 2019/12/10 08:40:38 UTC

回复: [Discuss] Shadow Database Configuration Yaml

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.