记goldendb使用shardingsphere分表引发问题

问题

goldendb版本:6.1.03
shardingsphere版本:4.1.1
使用sharding-jdbc连接goldendb报"where 1!=1 "异常;

check the manual that corresponds to your MySOL server version for the right syntax to use near '"table_name"' WHERE 1!=1 at line 1

原因

shardingsphere4.1.1版本中org.apache.shardingsphere.underlying.common.database.type.DatabaseTypes中的DATABASE_TYPES初始化之后只有数据库类型
goldendb默认是不支持的

public static DatabaseType getDatabaseTypeByURL(final String url) {
        return DATABASE_TYPES.values().stream().filter(each -> matchStandardURL(url, each) || matchURLAlias(url, each)).findAny().orElse(DATABASE_TYPES.get("SQL92"));
    }
会根据传入的url来和数据库类型来判断是否存在,不存在则使用SQL92协议

解决

升级sharding版本
2、将url中jdbc:goldendb改成jdbc:mysql可以规避。
或者使用SPI机制可以很好的对ShardingSphere进行扩展,重写适配goldendb的shardingsphere方言
1、实现BranchDatabaseType
2、实现DataSourceMetaData
3、在resources下添加META-INF/services/org.apache.shardingsphere.spi.database.type.DatabaseType并将GoldenDbDatabaseType路径添加到org.apache.shardingsphere.spi.database.type.DatabaseType文件中

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ShardingSphere是一个开源的分布式数据库中间件,用于处理数据库的分库分表问题。在ShardingSphere中,分表配置是通过配置文件来实现的。 首先,你需要在ShardingSphere的配置文件中指定数据源和数据表的规则。在数据源规则中,你可以配置多个数据源,每个数据源对应一个数据库,可以是主库或者从库。在数据表规则中,你需要指定分表的策略和分表字段。 下面是一个示例的ShardingSphere配置文件中的分表配置部分的示例: ```yaml dataSources: ds0: ... ds1: ... rules: - !SHARDING tables: user: actualDataNodes: ds${0..1}.user_${0..2} tableStrategy: standard: shardingColumn: user_id shardingAlgorithmName: userShardingAlgorithm ... shardingAlgorithms: userShardingAlgorithm: type: INLINE props: algorithm-expression: user_${user_id % 3} ``` 在上面的示例中,我们配置了两个数据源(ds0和ds1),每个数据源对应一个数据库。然后,我们定义了一个user表的分表规则。actualDataNodes指定了实际的数据节点,其中ds${0..1}表示ds0和ds1两个数据源,user_${0..2}表示user_0、user_1和user_2三张真实的数据表。tableStrategy指定了分表策略,这里使用了标准的分表策略,根据user_id字段进行分表使用了名为userShardingAlgorithm的分表算法。 最后,我们还需要在ShardingSphere中配置userShardingAlgorithm的具体实现,这里使用了INLINE方式,通过取模运算来确定数据表。 以上是一个简单的ShardingSphere分表配置的示例,你可以根据自己的需求进行配置。具体的配置方式还会根据你使用数据库和ShardingSphere的版本而有所不同,你可以参考ShardingSphere的官方文档来获取更详细的配置信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值