大量数据加载/卸载的最佳实践?

时间:2010-09-27 00:09:40

标签: database oracle design-patterns architecture

我的问题适用于ETL场景,其中转换是在数据库之外(完全)执行的。 如果您要提取,转换和加载大量数据(超过2000万条记录),所涉及的数据库是:Oracle和MSSQL Server,那么最好的方法是:

  1. 从源数据库中有效地读取:有没有办法可以避免通过网络进行所有查询?我听说过关于Direct Path Extract方法/批量卸载方法的好东西 - 我不太确定它们是如何工作的,但我认为我需要一个转储文件来进行任何类型的非基于网络的数据读取/导入?
  2. 有效地编写转换后的内容 数据到目标数据库?:应该 我考虑Apache Hadoop?会吗 帮助我开始转型 并行加载我的所有数据 目标数据库? - 可不可能是 比说,Oracle的批量加载更快 效用?如果没有,有没有办法 远程调用批量加载utlities Oracle / MSSQL Server?
  3. 感谢您的想法/建议。

2 个答案:

答案 0 :(得分:1)

我总是会使用db的批量加载工具。远程控制批量负载是一个系统管理员问题;总有办法做到这一点。

这意味着ETL的前两个阶段将是为批量加载工具生成正确文件格式的应用程序,最后一个阶段是调用批量加载。

答案 1 :(得分:0)

如果将数据提取到平面文件,则可以使用Oracle外部表直接将文件读入oracle。此时,您可以执行直接路径插入(/ * + append * /)以执行必要的转换。此外,如果表格是nologging,您将节省重做成本,但需要考虑到数据可能丢失/需要在下次备份之前发生媒体故障时重新加载。

此外,如果数据是基于时间的,请考虑使用分区和分区交换。您可以通过上述方法将数据加载到无索引的临时表中,创建必要的索引(也可能是NOLOGGING),这比在插入期间维护索引更快,然后将分区“交换”到主表中。