首页 > 数据库 >达梦数据库使用ShardingSphere

达梦数据库使用ShardingSphere

时间:2023-05-09 14:37:22浏览次数:41  
标签:core database ShardingSphere 数据库 spi shardingsphere apache org 达梦

 

ShardingSphere只支持主流数据库,国产的数据库并不支持,就比如达梦数据库,所以我们自己扩展。

1. 下载 shardingsphere源码

  下载地址:https://github.com/apache/shardingsphere

  进入网址后,选择自己使用的 Tags 分支,并下载代码。我使用的版本是 4.0.0-RC2

  再下载代码,目前支持 git clone,和 zip 压缩包下载。

 

2. 达梦扩展

  在 sharding-core-common 模块下

  实现 org.apache.shardingsphere.spi.database.DataSourceMetaData 接口,实现类写到 org.apache.shardingsphere.core.metadata.datasource.dialect 目录下

 

  实现 org.apache.shardingsphere.spi.database.BranchDatabaseType 接口,实现类写到 org.apache.shardingsphere.core.spi.database 目录下

package org.apache.shardingsphere.core.spi.database;

import org.apache.shardingsphere.core.database.DatabaseTypes;
import org.apache.shardingsphere.core.metadata.datasource.dialect.DMDataSourceMetaData;
import org.apache.shardingsphere.spi.database.BranchDatabaseType;
import org.apache.shardingsphere.spi.database.DataSourceMetaData;
import org.apache.shardingsphere.spi.database.DatabaseType;

import java.util.Collection;
import java.util.Collections;

/**
 * @author zhanghe
 */
public class DMDatabaseType implements BranchDatabaseType {

    @Override
    public String getName() {
        return "DM";
    }

    @Override
    public Collection<String> getJdbcUrlPrefixAlias() {
        return Collections.emptyList();
    }

    @Override
    public DataSourceMetaData getDataSourceMetaData(String url) {
        return new DMDataSourceMetaData(url);
    }

    // sql解析等操作使用MySQL的实现
    @Override
    public DatabaseType getTrunkDatabaseType() {
        return DatabaseTypes.getActualDatabaseType("MySQL");
    }

}

  关于 getTrunkDatabaseType 方法,要说明一下,这里我们使用的MySQL的实现解析SQL,当然也可以选择 Oracle 等其他数据库,如果需要自己来实现,就需要在 sharding-core-parse下创建自己的module

 

本来还想着一个微服务同时支持MySQL和达梦库的,但发现sharding并不支持不同数据库类型的垂直分库,报错信息如下:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'shardingDataSource' defined in class path resource [org/apache/shardingsphere/shardingjdbc/spring/boot/SpringBootConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.sql.DataSource]: Factory method 'shardingDataSource' threw exception; nested exception is java.lang.IllegalStateException: Database type inconsistent with 'org.apache.shardingsphere.core.spi.database.DMDatabaseType@1cec219f' and 'org.apache.shardingsphere.core.spi.database.MySQLDatabaseType@2b289ac9'

  我同时看了4.0.0-RC2、4.1.1、5.1.0 这三个版本,判断数据库类型的代码在不同的版本中,位置是不一样的,我就不贴类了,报错代码如下:

  dataSourceMap 是已加载的多个数据源,把判断出类型的第一个数据源类型存到了 result 里,再用 result 对比后面的数据源,如果不同就会报错。

    private DatabaseType createDatabaseType() throws SQLException {
        DatabaseType result = null;
        for (DataSource each : dataSourceMap.values()) {
            DatabaseType databaseType = createDatabaseType(each);
            Preconditions.checkState(null == result || result == databaseType, String.format("Database type inconsistent with '%s' and '%s'", result, databaseType));
            result = databaseType;
        }
        return result;
    }

 

标签:core,database,ShardingSphere,数据库,spi,shardingsphere,apache,org,达梦
From: https://www.cnblogs.com/huanshilang/p/17382475.html

相关文章

  • PG系、Oracle、MySQL数据库在特定场景下结果差异分析
    PG系、Oracle、MySQL数据库在特定场景下结果差异分析作者:余从佳更新时间:2022-07-0110:52人气值:416 本文主要介绍以PolarDBO引擎、ADBPG为代表的PG系数据库在某种特定事务场景下,其事务结果与Oracle、MySQL不同的现象,并分析该现象出现的原因。一、数据初始化 Cr......
  • 多连接的数据库管理工具Navicat Premium 16.1.9 Mac版
    NavicatPremium是一款多连接的数据库管理工具,它是一款免费的多通道、多连接程序,它支持企业和组织同时使用多个应用程序,在一个应用程序中运行多个数据库管理程序。使用Premium可以在同一应用程序中执行多个数据库程序。NavicatPremium可根据应用程序或Web服务之间的速度差异调......
  • 2023年4月国产数据库大事记-墨天轮
    本文为墨天轮社区整理的2023年4月国产数据库大事件和重要产品发布消息。目录4月国产数据库大事记(时间线)产品/版本发布兼容认证代表厂商大事记相关资料4月国产数据库大事记(时间线)4月1日,深圳市高校教育信息化学会举办战略合作签约和实验室揭牌仪式。人大金仓与学会联合深......
  • HTAP for MySQL 在腾讯云数据库的演进
    摘要:MySQL在充分利用多核计算资源方面比较欠缺,无法同时满足在线业务和分析型业务的客户需求,而单独部署一套专用的分析型数据库意味着额外的成本和复杂的数据链路。本次主题将介绍腾讯云数据库为满足此类场景而在HTAPforMySQL产品方面进行的尝试。2023首届云数据库技术沙龙MySQ......
  • 人大金仓数据库迁移工具web版访问方式
    1.新版使用谷歌浏览器进行访问访问地址: http://localhost:54523/默认用户名及密码:kingbase/kingbase2. 老版使用谷歌浏览器进行访问访问地址:http://localhost:8080/默认用户名及密码:admin/123456&*会话保存策略:会话保存时间为一天,服务重启或登出失......
  • milvus 又一个开源的向量数据库
    以前简单介绍过一个基于rust的qdrant向量数据库,milvus也是一个类似的milvus一些特性快速支持非结构化数据可靠高可用&弹性混合搜索通用lambda架构,支持批以及stream处理参考架构说明因为GPT的火爆,最近一些向量数据库比较火了(支持ai的一些能力),milvus同时提供了......
  • BBS数据库表结构设计
    BBS数据库表结构设计在我们分析完一个项目的需求之后,我们着手开发项目所需要做的第一件事就是设计数据库的表结构及其字段。一般来说,设计一个数据库的表结构一般要注意以下三点:第一,把项目的需求转化为一个个数据库中的表第二,探寻表与表之间的关联关系第三,牢记以下原则:......
  • SQL Server数据库判断最近一次的备份执行结果
    1麻烦的地方在SQLServer的官方文档里面可以看到备份和还原的表,但是这些表里面只能找到备份成功的相关信息,无法找到备份失败的记录,比如msdb.dbo.backupset。对于一些监控系统未监控作业的情况下,想要监控数据库备份任务执行失败而触发告警规则,有些麻烦。但是SQLserver内部是可......
  • java基于ssm的求职招聘管理系统、校园求职招聘管理系统,附源码+数据库,适合毕业设计、课
    1、项目介绍​该求职招聘网站基于B/S架构,采用SSM框架,运用JSP网页开发技术,并结合MySQL数据库,为招聘者和求职者搭建了一个高效、便捷的网络招聘平台。系统总共有三个角色:求职者、招聘者、管理员​本系统分别为前台求职招聘和后台系统管理,功能如下:​1.前台求职招聘​前台首......
  • 数据库优化
    数据库优化一、数据库硬件优化(选型)1.一般数据库选择1.真实的硬件,物理机2.云产品ECS,自己搭建数据库3.云数据库(RDS、DRDS)2.数据库类型1.OLTP在线事务处理系统 支持大量并发用户定期添加和修改数据。 反映随时变化的单位状态,但不保存其历史记录。 包含大量数据,其中包括......