ShardingSphere分库必须保证两个库的表的数量与名称一致吗?
ShardingSphere分库必须保证两个库的表的数量与名称一致吗?简介:大佬见笑,最近查看分库分表的解决方案提到了ShardingSphere,于是采用ShardingSphere-jdbc来去做Demo试验一下。分了两个库,在保证两个库表的名称数量一致的情况下,可以。但
大佬见笑,最近查看分库分表的解决方案提到了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表就会走这个数据库了
本文用户投稿或网站收集转载,如有侵权请联系本站。