ShardingSphere分库必须保证两个库的表的数量与名称一致吗?

大佬见笑,最近查看分库的解决方案提到了ShardingSphere,于是采用ShardingSphere-jdbc来去做Demo试验一下。分了两个库,在保证两个库的名称数量一致的情况下,可以。但我这有个想法,假如说。分了两个库,A库下有sys_user_0表和sys_user_1表,B库下有sys_user_0,sys_user_1,sys_role 表,即sys_user表分库分表,但是sys_role不分。然后重新配置了下sys_role的分片规则。

sys_role:
  actual-data-nodes: ds0.sys_role

因为sys_role在B表下,就只配了这么一个,打印日志显示的执行sql 只执行了B库下的sys_user_0 join sys_role和sys_user_1 join sys_role。

所以有了上面这个疑问:ShardingSphere分库必须保证两个库的表的数量与名称一致吗?

还是说我的配置有问题。下面附上yml的配置的分片规则

spring:
  main:
   allow-bean-definition-overriding: true
  application:
   name: sjdbc
  shardingsphere:
   # 属性配置
   props:
    # 是否开启 SQL 显示,默认值: false
    sql:
     show: true
   # 数据源配置,可配置多个
   datasource:
    # 本案例中配置了两个数据源,分别对应刚才创建的两个 MySQL 容器
    names: ds0,ds1
    ds0:
     type: com.zaxxer.hikari.HikariDataSource
     driver-class-name: com.mysql.jdbc.Driver
     jdbc-url: jdbc:mysql://127.0.0.1:3306/shardingsphere_0?useUnicode=true&characterEncoding=utf-8&serverTimezone=Hongkong&useSSL=false
     username: root
     password: '123'
     hikari:
      minimum-idle: 5
      idle-timeout: 600000
      maximum-pool-size: 10
      auto-commit: true
      pool-name: MyHikariCP
      max-lifetime: 1800000
      connection-timeout: 30000
      connection-test-query: SELECT 1
    ds1:
     type: com.zaxxer.hikari.HikariDataSource
     driver-class-name: com.mysql.jdbc.Driver
     jdbc-url: jdbc:mysql://127.0.0.1:3306/shardingsphere_1?useUnicode=true&characterEncoding=utf-8&serverTimezone=Hongkong&useSSL=false
     username: root
     password: '123'
     hikari:
      minimum-idle: 5
      idle-timeout: 600000
      maximum-pool-size: 10
      auto-commit: true
      pool-name: MyHikariCP
      max-lifetime: 1800000
      connection-timeout: 30000
      connection-test-query: SELECT 1
   # 分片规则配置
   sharding:
#    # 绑定表规则列表
    binding-tables: sys_user
#    # 默认数据库分片策略,同分库策略
    default-database-strategy:
     inline:
      # 分片算法行表达式,需符合 groovy 语法
      # 此处根据 time_samp  分片
      # 如果 time_samp 为奇数则落入奇数库即 ds1 匹配的数据源
      # 如果 time_samp 为偶数则落入偶数库即 ds0 匹配的数据源
      algorithm-expression: ds$->{time_samp % 2}
      # 分片列名称
      sharding-column: time_samp
    # 数据分片规则配置,可配置多个
    tables:
     # 逻辑表名称
     sys_user:
      # 由数据源名 + 表名组成,以小数点分隔
      actual-data-nodes: ds$->{0..1}.sys_user_$->{0..1}
      # 分表策略,同分库策略
      table-strategy:
       inline:
        # 此处根据 id 分片
        # 如果 id 为奇数则落入奇数表即 sys_user_1
        # 如果 id 为偶数则落入偶数表即 sys_user_0
        algorithm-expression: sys_user_$->{id % 2}
        # 分片列名称
        sharding-column: id
     sys_role:
      actual-data-nodes: ds0.sys_role

然后附上两个表的结构:

sys_user表 : id,username,time_samp

sys_role表:username,rolename

两个表通过username关联

回答

加个这个配置

sharding:
  #默认数据库,所有未配置分库规则的表,都会走这里(无论是否有在tables中配置规则)
  default-data-source-name: ds0

sys_role表就会走这个数据库了