mysql迁移mpp数据库Greenplum
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 「软件老王」,如果觉得还可以的话,关注下呗,后续更新秒知!欢迎讨论区、同名公众号留言交流!
mysql迁移mpp数据库Greenplum的更多相关文章
- python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
1. 场景描述 一直做java,因项目原因,需要封装一些经典的算法到平台上去,就一边学习python,一边网上寻找经典算法代码,今天介绍下经典的K-means聚类算法,算法原理就不介绍了,只从代码层面 ...
- 数据库 SQL Server 到 MySQL 迁移方法总结
最近接手一起老项目数据库 SQL Server 到 MySQL 的迁移.因此迁移前进行了一些调查和总结.下面是一些 SQL Server 到 MySQL 的迁移方法. 1. 使用 SQLyog 迁移 ...
- 迁移应用数据库到MySQL Database on Azure
by Rong Yu 有用户问怎么把他们应用的数据库迁移到MySQL Database on Azure上,有哪些方式,有没有需要注意的地方.今天我们来概括介绍一下迁移应用数据库到MySQL Data ...
- 使用Oracle SQL Developer迁移MySQL至Oracle数据库
Oracle SQL Developer是Oracle官方出品的数据库管理工具.本文使用Oracle SQL Developer执行从MySQL迁移至Oracle数据库的操作. 2017年3月6日 操 ...
- 怎样将数据库MySQL 迁移到 MariaDB 上
自从甲骨文收购 MySQL 后,由于甲骨文对 MySQL 的开发和维护更多倾向于闭门的立场,很多 MySQL 的开发者和用户放弃了它.在社区驱动下,促使更多人移到 MySQL 的另一个叫 MariaD ...
- Pivotal开源基于PostgreSQL的数据库Greenplum
http://www.infoq.com/cn/news/2015/11/PostgreSQL-Pivotal 近日,Pivotal宣布开源大规模并行处理(MPP)数据库Greenplum,其架构是针 ...
- 对Oracle 、SQL Server、MySQL、PostgreSQL数据库优缺点分析
对Oracle .SQL Server.MySQL.PostgreSQL数据库优缺点分析 Oracle Database Oracle Database,又名Oracle RDBMS,或简称Oracl ...
- 将数据从MySQL迁移到Oracle的注意事项
将数据从MySQL迁移到Oracle的注意事项1.自动增长的数据类型处理MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值.ORACLE没有自动增长的数据类型,需要建立一个自动 ...
- Linux 上从 MySQL 迁移到 MariaDB 的简单步骤
大家好!这是一篇介绍如何在服务器或个人电脑上从MySQL迁移到MariaDB的教程.也许你会问为什么我们要将数据库管理从MySQL迁移到MariaDB.往下看我们告诉你为什么这样做.为什么要用Mari ...
随机推荐
- 用margin还是padding ?
margin是用来隔开元素与元素的间距:padding是用来隔开元素与内容的间隔. margin用于布局分开元素使元素与元素互不相干:padding用于元素与内容之间的间隔,让内容(文字)与(包裹)元 ...
- TestNG中DataProvider的用法二:简单的数据驱动
@DataProvider标记的方法除了可以返回数组外,还可以返回一个Iterator,这样的好处是不用把所有的测试数据都加载到内存中,而是需要的时候就读一条. 下面的例子就使用了Iterator,然 ...
- 10分钟了解分布式CAP、BASE理论
CAP理论 2000年7月,Eric Brewer教授提出CAP猜想:2年后,Seth Gilbert和Nancy Lynch从理论上证明了CAP:之后,CAP理论正式成为分布式计算领域的公认定理. ...
- angularjs通信以及postmessage与iframe通信
这篇文章是用markdown工具写的,有需要的可以使用vscode打开 # angularjs 控制器.组件之间的通信 ## 一.基于事件的方式 此方式下,主要通过 angularjs 内置指令` ...
- [Chat]实战:仿网易云课堂微信小程序开发核心技术剖析和经验分享
本Chat以一个我参与开发并已上线运营近2年——类似网易云课堂的微信小程序项目,来进行微信小程序高级开发的学习. 本场Chat围绕项目开发核心技术分析,帮助你快速掌握在线视频.音频类小程序开发所需要的 ...
- C程序设计(第四版)课后习题完整版 谭浩强编著
//复习过程中,纯手打,持续更新,觉得好就点个赞吧. 第一章:程序设计和C语言 习题 1.什么是程序?什么是程序设计? 答:程序就是一组计算机能识别和执行的指令.程序设计是指从确定任务到得到结果,写出 ...
- 100天搞定机器学习|Day21 Beautiful Soup
前情回顾 机器学习100天|Day1数据预处理 100天搞定机器学习|Day2简单线性回归分析 100天搞定机器学习|Day3多元线性回归 100天搞定机器学习|Day4-6 逻辑回归 100天搞定机 ...
- 7.15 迭代器 for循环的本质 生成器
迭代器 迭代:更新换代的过程,每次的迭代都必须基于上一次的结果 迭代器:迭代取值的工具 作用 迭代器提供了一种不依赖于索引取值的方式 根据以上对于迭代的描述,如果只是简单的重复,不算迭代,如下: n ...
- Could not determine type for java util List
问题场景:在实体类中需要使用List集合存储字段,启动时找不到List类型 问题解决:在字段上添加@ElementColletion(targetClass=String.class)表示是一个集合映 ...
- Sqlserver 存储过程中使用事务
ALTER PROCEDURE [dbo].[Purchase_Create]@Docid varchar(100), ---- 搜索唯一编号@Title varchar(100), - ...