大家好,我是立东,一名全栈工程师,专注于Java与Vue技术栈的开发。我在工作流业务领域有着丰富的经验,并在2023年至2024年间陆续开源了多个相关项目,包括工作流设计器、工作流引擎以及工作流管理系统。
个人网站:www.mldong.com/
B站主页:space.bilibili.com/1395438398
今天给大家分享我的mldong快速开发框架适配达梦、神州通用及人大金仓数据库经验。
引言
在当前信息技术领域,随着国家对信息安全和自主可控性的重视不断增加,国产软件的支持需求正呈现出前所未有的增长趋势。特别是在基础软件如操作系统、数据库等领域,推动国产化替代已成为国家战略的重要组成部分。为了响应这一趋势,各级政府部门和企事业单位纷纷加快了信息技术应用创新(信创)的步伐,力求减少对国外技术和产品的依赖,增强国家的信息安全和技术独立性。
然而,在这个过程中,开发者们面临着一系列新的挑战。其中,如何让现有的应用程序兼容不同的国产数据库成为了一个亟待解决的问题。不同于传统的国际主流数据库产品,国产数据库往往有着各自独特的特性、优化点以及与之配套的最佳实践方案。这不仅要求开发者具备深厚的技术积累,还需要他们能够灵活应对各种技术难题,确保应用程序能够在不同环境下稳定运行并发挥出最佳性能。
本文将基于我们团队在实际项目中积累的经验,分享如何成功地将mldong快速开发框架适配到达梦、神州通用、人大金仓三大主流国产数据库的具体方法和技巧。希望通过我们的实践总结,能够为更多开发者提供有价值的参考,共同推进信息技术应用创新的发展进程。
基本概念
下面是MySQL与国产数据库(达梦DM、神州通用ShenTong、人大金仓Kingbase)在数据库、模式(Schema)、表(Table)管理方式上的对比表格:
特性/数据库系统 | MySQL | 达梦DM | 神州通用ShenTong | 人大金仓Kingbase |
---|---|---|---|---|
数据库(Database) | - 数据库是一个逻辑容器,用于存储相关的对象。 - 创建:CREATE DATABASE 或 CREATE SCHEMA 。 - 数据库间相互独立。 | - 类似于MySQL,数据库作为一个逻辑容器。 - 支持创建多个数据库实例。 - 强调数据的安全性和完整性。 | - 数据库作为基本的数据组织单位。 - 提供对数据对象的管理和控制。 - 注重性能优化和安全性。 | - 支持创建和管理多个数据库实例。 - 每个实例可以包含多个模式。 - 提供丰富的安全策略和数据保护机制。 |
模式(Schema) | - 在实践中,模式通常等同于数据库。 - 严格来说,模式是数据库内的一个命名空间。 - 允许在同一数据库中定义多个模式以实现逻辑隔离。 | - 模式是指数据库内部的一个逻辑分区,用来组织和隔离不同的用户对象集合。 - 模式名通常与用户名相同。 - 提供了更细粒度的对象访问控制。 | - 支持模式的概念,允许在同一数据库内创建多个模式。 - 有助于实现更好的对象管理和权限控制。 - 模式间可以有相同的对象名而不冲突。 | - 定义与标准SQL一致,是一个数据库对象的集合。 - 包括表、视图、索引等。 - 不同模式间可以有相同的对象名而不冲突。 - 提供灵活的权限管理。 |
表(Table) | - 表是存储具体数据记录的基本单元。 - 每张表属于一个特定的数据库或模式。 - 支持多种数据类型和约束条件。 | - 表同样是存储数据的基本单元,位于某个模式之下。 - 提供了针对特定需求的扩展特性,如分布式事务支持等。 - 强调高效的数据处理能力。 | - 基于模式进行组织。 - 提供丰富的类型支持和优化机制。 - 支持复杂查询和数据分析功能。 | - 表概念与其他关系型数据库相似。 - 可能包含针对特定需求的扩展特性,比如对分布式事务的支持等。 - 支持高级的查询优化技术。 |
适配的基本思路
环境安装
- 安装数据库
- 安装数据库管理工具
- 安装数据库迁移工具
数据库管理工具的基本使用
每一套国产数据库都有其配套的管理工具,使用上都大同小异。
- 如何创建数据库实例
- 如何创建数据库模式
- 如何创建数据库表
数据库迁移
每一套国产数据库都有配套的数据库迁移工具,可以将不同源的数据库同步到目标数据库中,其基本的操作思路如下:
- 源数据库配置
- 目标数据库配置
- 迁移任务
框架适配
- 引入jdbc驱动包
- 驱动名称
driver-class-name
调整 - 连接url调整
达梦连接配置
application.yml配置
# Mysql数据库配置
spring:
datasource:
driver-class-name: dm.jdbc.driver.DmDriver
url: jdbc:dm://${DB_HOST:localhost}:${DB_PORT:5236};SCHEMA=${DB_SCHEMA:MLDONG-PLUS}
username: ${DB_USER:SYSDBA}
password: ${DB_PASSWORD:8Eli#gr#AUk}
配置说明
- DB_HOST 为数据库主机地址
- DB_PORT 为数据库端口
- DB_NAME 为数据库名称,对应的是安装的实例,这个找安装神州通用数据库的安装人员
- DB_SCHEMA 为数据库模式名称
- DB_USER 为数据库用户名
- DB_PASSWORD 为数据库密码
神州通用连接配置
application.yml配置
# Mysql数据库配置
spring:
datasource:
driver-class-name: com.oscar.Driver
url: jdbc:oscar://${DB_HOST:172.16.31.160}:${DB_PORT:2003}/${DB_NAME:xxx}?currentSchema=${DB_SCHEMA:M-TEST}
username: ${DB_USER:root}
password: ${DB_PASSWORD:8Eli#gr#AUk}
配置说明
- DB_HOST 为数据库主机地址
- DB_PORT 为数据库端口
- DB_NAME 为数据库名称,对应的是安装的实例,这个找安装神州通用数据库的安装人员
- DB_SCHEMA 为数据库模式名称
- DB_USER 为数据库用户名
- DB_PASSWORD 为数据库密码
人大金仓连接配置
application.yml配置
# Mysql数据库配置
spring:
datasource:
driver-class-name: com.kingbase8.Driver
url: jdbc:kingbase8://${DB_HOST:localhost}:${DB_PORT:54321}/test?currentSchema=${DB_SCHEMA:mldong-plus}
username: ${DB_USER:kingbase}
password: ${DB_PASSWORD:123456}
配置说明
- DB_HOST 为数据库主机地址
- DB_PORT 为数据库端口
- DB_NAME 为数据库名称
- DB_SCHEMA 为数据库模式名称,在人大金仓中是不支持这个配置
- DB_USER 为数据库用户名
- DB_PASSWORD 为数据库密码
总结
这里只是基础框架的适配,相对于业务系统的适配还是容易的,因为业务系统的适配可能会涉及到业务代码的调整,特别是使用了一些特殊的查询sql的场景,这里就不一一介绍了,具体问题再具体问题。