Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 海量数据加载/卸载的最佳实践?_Database_Oracle_Design Patterns_Architecture - Fatal编程技术网

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

Database 海量数据加载/卸载的最佳实践?,database,oracle,design-patterns,architecture,Database,Oracle,Design Patterns,Architecture,我的问题适用于ETL场景,其中转换在数据库之外执行(完全)。 如果要提取、转换和加载大量数据(超过2000万条记录或更多),并且涉及的数据库是:Oracle和MSSQL Server,那么最好的方法是: 有效地读取源数据库:有没有一种方法可以避免通过网络进行所有查询?我听说过关于直接路径提取方法/批量卸载方法的好消息-我不确定它们是如何工作的,但我想我需要一个转储文件来进行任何类型的非基于网络的数据读取/导入 有效地编写转换后的 数据到目标数据库?:应该 我考虑Apache Hadoop?会吗

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

  • 有效地读取源数据库:有没有一种方法可以避免通过网络进行所有查询?我听说过关于直接路径提取方法/批量卸载方法的好消息-我不确定它们是如何工作的,但我想我需要一个转储文件来进行任何类型的非基于网络的数据读取/导入
  • 有效地编写转换后的 数据到目标数据库?:应该 我考虑Apache Hadoop?会吗 帮助我开始我的转变和 并行地将我的所有数据加载到 目的地数据库?-是吗 比说,Oracle的批量加载速度更快 效用?如果没有,有没有办法 远程调用上的大容量加载属性 Oracle/MSSQL服务器

  • 感谢您的想法/建议

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


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

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


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

    为此,我将始终使用db的批量加载功能。批量加载的远程控制是一个系统管理问题;总有办法做到这一点


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

    为此,我将始终使用db的批量加载工具。批量加载的远程控制是一个系统管理问题;总有办法做到这一点


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

    数据的大小(以GB为单位)是多少?源和目标是否始终使用相同的数据库?也就是说,您总是从Oracle转到SQL Server,还是从SQL Server转到Oracle?您能否构建特定于数据库的提取和加载代码?或者您正在尝试构建一个与数据库无关的ETL过程?@jonearles遗憾的是,我没有大小信息。然而,让我们假设它足够大,通过网络链接传输它需要一个多小时。@Justin不一定总是-但大多数时候,我可能会使用相同的数据库作为源和目标。我很少做从Oracle到SQL Server的ETL,反之亦然。目前,提取和加载是通过jdbc在数据库环境之外进行的,因此,到目前为止,ETL过程与数据库无关。但是,我不介意探索在提取/加载过程中大大提高性能的方法,即使我要编写特定于db的代码。目前,我的产品仅支持3个数据库—Oracle、MSSQL和Sybase。数据的大小(以GB为单位)是多少?源和目标是否始终使用相同的数据库?也就是说,您总是从Oracle转到SQL Server,还是从SQL Server转到Oracle?您能否构建特定于数据库的提取和加载代码?或者您正在尝试构建一个与数据库无关的ETL过程?@jonearles遗憾的是,我没有大小信息。然而,让我们假设它足够大,通过网络链接传输它需要一个多小时。@Justin不一定总是-但大多数时候,我可能会使用相同的数据库作为源和目标。我很少做从Oracle到SQL Server的ETL,反之亦然。目前,提取和加载是通过jdbc在数据库环境之外进行的,因此,到目前为止,ETL过程与数据库无关。但是,我不介意探索在提取/加载过程中大大提高性能的方法,即使我要编写特定于db的代码。目前,我的产品只支持3个数据库—Oracle、MSSQL和Sybase。