zoukankan      html  css  js  c++  java
  • 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 「软件老王」,如果觉得还可以的话,关注下呗,后续更新秒知!欢迎讨论区、同名公众号留言交流!

  • 相关阅读:
    一句话开启XP_CMDSHELL
    CF14B Young Photographer 题解
    sql 存储过程与函数区别
    sql索引
    分区表中毒,重装系统
    面试
    XML范例的应用(转载)
    数据结构题目
    网页加载速度的方法和技巧
    设计模式分类
  • 原文地址:https://www.cnblogs.com/ruanjianlaowang/p/11451891.html
Copyright © 2011-2022 走看看