一
迁移场景
如下图所示,大部分场景都可以直接迁移到Greenplum,但也有部分场景(如高并发事务型场景)不太适合迁移到目前的Greenplum 5.X版本。
Oracle中应用场景 |
Oracle中响应时间 |
迁移到Greenplum建议 |
分析型场景 |
1秒以上 |
此类应用完全可以迁移至Greenplum,迁移后性能会有较明显提升 |
并发小查询场景 |
1秒以内 |
并发小查询场景包括小表全表扫描和大表索引扫描场景,迁移至Greenplum性能在同一量级,但因为数据节点交互,延迟会略有增加 |
并发数据加载场景 |
1秒以内 |
可以迁移至Greenplum,需要将逐笔插入操作改为微批量插入,由于Greenplum MPP架构优势,加载性能会有较明显提升 |
低并发事务型场景 |
1秒以内 |
可以迁移至Greenplum,需要做适当业务改造,将逐笔操作改为微批量操作 |
高并发事务型场景 |
1秒以内 |
不建议迁移到Greenplum,由于数据跨节点的网络交互和锁的问题,会导致性能有较大的损失,甚至无法满足业务要求。请关注Greenplum的研发进展和新版本特性,Greenplum社区正在不断增强高并发事务型特性。 |
Oracle到Greenplum迁移场景建议
用ELT替代ETL
ETL做为构建数据仓库的重要一环,承担了数据从OLTP系统到OLAP系统时重要的抽取、转换和加载工作。在银行等金融用户中,一般都是通过在ETL服务器上部署专门的ETL工具(如informatic 或 datastage),将数据抽取到数据仓库中进行复杂分析计算,再将算好的结果推回到OLTP系统以完成在线处理。一般的处理流程如下图所示:
数据以T-1的方式加载到Greenplum集群
但受限于ETL服务器的硬件性能,在大数据量的抽取转换时性能较差,随着分布式数据库技术的发展和硬件计算能力的增强,越来越多的用户采用ELT的方式,将ETL中最为耗时的工作放在OLAP系统中完成。这样做,一方面减少了ETL服务器的工作负载,提升了数据的转换效率;另一方面可以利用数据库本身提供的丰富转换函数减少开发的工作量,如下图所示,转换过程可以在数据入库过程中完成,或者在库内完成,从而利用MPP并行的优势,提升转换性能。
ETL到ELT
对于由Oracle到Greenplum的迁移,我们也推荐使用ELT的方式进行处理,如下图所示:
使用ELT流程代替ETL
二
迁移过程
数据平台迁移主要包括元数据迁移、数据迁移、数据校验、应用验证、性能优化等阶段,关于性能优化可以参考最佳实践的文档。接下来主要介绍元数据迁移、数据迁移和数据校验。
一、元数据迁移
关于AWS SCT安装和使用,可参考如下链接:
https://docs.aws.amazon.com/zh_cn/SchemaConversionTool/latest/userguide/Welcome.html
数据库存储对象转换评估报告
数据库代码转对象换评估报告
之后,我们点击应用就会在PostgreSQL数据库中创建对应的对象和函数。
SCT会自动作类型转换,如果你想了解Oracle和Greenplum中不同数据类型具体的转换方式,可以参考下表:
Oracle |
Greenplum |
Comment |
VARCHAR2(n) |
VARCHAR(n) |
在Oracle中n代表的是字节数,在Greenplum中n代表的是字符数 |
CHAR(n) |
CHAR(n) |
同上 |
NUMBER(n,m) |
NUMERIC(n,m) |
number可以转换成numeric,但如果真实业务中数值类型可以用:smallint、 int或bigint等替代,性能会有较大提升 |
NUMBER(4) |
SMALLINT |
|
NUMBER(9) |
INT |
|
NUMBER(18) |
BIGINT |
|
NUMBER(n) |
NUMERIC(n) |
如果n>19,可以转换成numerice类型 |
DATE |
TIMESTAMP(0) |
Oracle和Greenplum都有日期类似,但Oracle的日期类型会同时保存日期和时间,而Greenplum只保包存日期 |
TIMESTAMP WITH LOCAL TIME ZONE |
TIMESTAMPTZ |
注意:PostgreSQL中TIMESTAMPTZ不等同于Oralce中的TIMESTAMP WITH TIME ZONE |
CLOB |
TEXT |
PostgreSQL中TEXT类型不能超过1GB |
BLOB |
BYTEA(1 GB limit) |
在Oracle中BLOB用于存放非结构化的二进制数据类型,BLOB最大可存储128TB,而PostgreSQL中BYTEA类型最大可以存储1GB,如果有更大的存储要求,可以使用Large object类型 |
Oracle和Greenplum的字段类型映射表
2) 通过pg_dump导出元数据,命令如下: