1. 场景描述
因兄弟项目中 MySQL 有点扛不住了, 要做 sql 优化, 但是业务有点小复杂, 优化起来有点麻烦 (sql 嵌套有点多), 便想着用 Mpp 数据库 Greenplum 测试下, 看性能和复杂度怎么样, 趟趟水.
2. 解决方案
初步的想法是: 因为 MySQL 和 PostgreSQL(Greenplum 建立在 PostgreSQL 之上, i'm 软件老王) 都是使用的标准 sql, 直接把 MySQL 的建表语句在 Greenplum 建一边, 把数据导入过来测试一下就行了, 应该半天内就能搞定.
2.1 Greenplum 建表
将 MySQL 的表结构通过 navicat for MySQL 导出 (navivat 中只导出表结构, 如下图), 但是发现导出的结构在
Greenplum 中执行不了, MySQL 中的 ddl 语句:
`CONFIG_ID` varchar(36) COLLATE utf8_unicode_ci NOT NULL COMMENT '软件老王'
解决办法
(1) 网上找了 MySQL 转 PostgreSQL 的 java 代码, 写的不是太全面, 改了几次还是有点问题, 放弃.
(2) 问了下 dba, 用的 Navicat Premium 12 可以转, 网址: https://www.navicat.com.cn/
Navicat Premium 可以同时操作多个数据库, 包括: MySQL 和 greenplum(PostgreSQL), 以前使用 navicat for MySQL 只能操作 MySQL 数据库, navicat for PostgreSQL 只能操作 PostgreSQL.
2.2 导出数据结构
使用 Navicat Premium, 如下图:
左边选择 MySQL, 右边选择 greenplum, 同时去掉选项中的创建记录, 就能在 Greenplum 中创建表了.(先创建所有表, 数据量太大, 我们只导几张表的数据进行测试)
2.3 导入数据.
2.3.1 初步想法
初步想法是通过 Navicat 直接导入, 使用上面的 Navicat Premium12 就能直接从 MySQL 导入 Greenplum 数据, 但是导入了几张小表后, 碰到的一张 30 多万的表, 导了 20 多分钟还不到 40%, 看了下 greenplum 的 master 节点 CPU 有点高, 后面还有好几张百万级的数据, 这样的效率要导到猴年马月了.
2.3.2 外部表方式
(1) 首先需要在 master 节点启动外部表程序 fdisk, 新建个目录, 存放从 MySQL 中导出的文件, 我导出的是 CSV 格式.
[gpadmin@软件老王 ~]$ mkdir script
[gpadmin@软件老王 ~]$ nohup gpfdist -d /home/gpadmin/script/ -p 8081 -l /home/gpadmin/script/ruanjianlaowang.log &
(2) 创建外部表
- ------------------------
- CREATE EXTERNAL TABLE "public"."t_laowang_ex" (
- "laowang_type" numeric(3),
- "laowang_id" varchar(36)
- )
- location ('gpfdist://10.192.0.168:8081/laowang.csv') format 'csv' (DELIMITER ',') encoding 'utf8';
说明:
(a) 可以直接将原表的 ddl 语句拿出来, 名称增加个_ex(新建外部表的时候, 发现 not null 用不了要替换成空)
(b) 其中 ip 地址是 greenplum 的 master 地址, laowang 是 CSV 文件名称, CSV 文件是通过 navicat 右键导出的, i'm 软件老王.
gpfdist://10.192.0.168:8081/laowang.CSV
(3) 数据装载到 greenplum 表中
insert into t_laowang select * from t_laowang_ex;
i'm 软件老王
这样就完成了数据从 MySQL 迁移到了 greenplum 中, 具体测试结果对比就不在这里多说了.
2.4 总体结论
方案执行比想象的复杂, 一是两个数据库建表 sql 不一样, 后通过最新的 Navicat Premium 12 解决; 二是直接通过 navicat 导入, 在效率上有问题, 走不通, 通过外部表的方式解决, 外部表方式 2-3 秒就能导入完成; 三是, 新建外部表的时候, 跟原表稍微有点差异, 也的注意下.
I'm 「软件老王」, 如果觉得还可以的话, 关注下呗, 后续更新秒知! 欢迎讨论区, 同名公众号留言交流!
来源: https://www.cnblogs.com/ruanjianlaowang/p/11451891.html