背景
一部分开发者会面临这样一个场景:原先公司用的是像 MySQL 这种流行的数据库,后来经过大量的生产环境实践,发现 MySQL 并不太适合,有其他的数据库更贴合自己的业务场景,所以决定更换。
在通常情况下,虽然数据库类型要更换,但是我们的实体关系还是不变的,也就是说我们的表结构信息是基本相同的。我们只需要处理数据库之间的差异,比如类型差异,函数差异,索引差异等。
这就带来了另一些问题,处理这些冲突需要我们对新数据库有非常熟悉的掌握;另外就是大型软件系统的表数量可能有成百上千张,每个表的字段数量亦是如此。这两点会大量耗费开发者的时间与精力。
常见的解决办法
- 常见的解决办法是通过编写脚本的方式,来进行自动化处理,如下面的 mysql_to_doris.py 脚本(伪代码仅做展示用),就是帮助自动转化 MySQL 到 Doris 表结构的
import pymysql
class TableColumnEntity:
def __init__(self, column_name, ordinal_position, data_type, character_maximum_length, column_type, column_key,
column_comment): # 定义 Table, column 实体
def info_config(): # 读取表配置信息
def table_column_info(): # 连接数据库获取元信息
def mysql_type_convert(data_type, character_maximum_length, column_type):
# 类型转换
def batch_mysql_to_doris(info_map, table_map):
# 此处略去一万行代码,处理各种差异
if __name__ == '__main__':
# 读取表信息配置文件
info_map = info_config()
# 读取mysql获取表的column
table_map = table_column_info()
# 生成doris建表语句
batch_mysql_to_doris(info_map, table_map)
- 执行完脚本后,最终会在本地生成 Doris 建表语句
- 脚本编写起来比较繁琐,如有其他对端数据库的转换需求又要重新编写,不懂得 Python 语法甚至还要学习一门新语言。所以有没有其他准确又快捷的方式?
CloudDM 一键生成
- 打开 CloudDM,右键选择要转换的表,选择 获取 DDL 语句 功能
- 切换到 生成DDL 选项,选择要转换的对端数据库,比如 Doris
- 转换完成,复制语句就可以使用
我们是怎么做的
- 流程与上述的脚本的处理方式类似,不过我们细节把控更准确,转换出的结果更专业。具体流程如下图所示:
软件下载与反馈
- 产品官网:https://www.clougence.com/clouddm-personal
- 问题反馈:https://gitee.com/clougence/clouddm-issue/issues
- 微信交流群:访问产品官网,扫描右侧二维码即可加入