【发布时间】:2011-04-17 13:18:56
【问题描述】:
我的问题适用于 ETL 场景,其中转换是在数据库之外(完全)执行的。 如果您要提取、转换和加载大量数据(20+ 百万条记录或更多)并且涉及的数据库是:Oracle 和 MSSQL Server,那么最好的方法是:
- 有效地从源数据库中读取:有没有一种方法可以避免通过网络进行所有查询?我听说过有关直接路径提取方法/批量卸载方法的好消息——我不太确定它们是如何工作的,但我想我需要一个转储文件来进行任何类型的非基于网络的数据读取/导入?
- 有效地编写转换后的 数据到目标数据库?:应该 我考虑 Apache Hadoop?会吗 帮助我开始我的转变和 将我的所有数据并行加载到 目标数据库? - 可不可能是 比说,Oracle 的批量加载更快 效用?如果没有,有没有办法 远程调用批量加载实用程序 Oracle/MSSQL 服务器?
欣赏您的想法/建议。
【问题讨论】:
-
数据的大小(以千兆字节为单位)是多少?
-
您是否总是为源和目标使用相同的数据库?也就是说,您是否总是从 Oracle 转到 SQL Server,反之亦然?您可以构建特定于数据库的提取和加载代码吗?或者您是否正在尝试构建与数据库无关的 ETL 流程?
-
@jonearles 不幸的是,我没有尺码信息。但是,我们假设它足够大,通过网络链接传输它需要一个多小时。
-
@Justin 不一定总是 - 但大多数时候,我可以为源和目标使用相同的数据库。我很少会从 Oracle 到 SQL Server 进行 ETL,反之亦然。目前,提取和加载是通过 jdbc 在 db 环境之外发生的,所以是的,到目前为止,ETL 过程与数据库无关。但是,我不介意探索可以在提取/加载期间大大提高性能的方法,即使我要编写特定于 db 的代码。目前,我的产品只支持 3 个数据库——Oracle、MSSQL 和 Sybase。
标签: database oracle design-patterns architecture