Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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 如何在ETL服务器上按节点分割DB2加载文件?_Database_Load_Db2_Etl - Fatal编程技术网

Database 如何在ETL服务器上按节点分割DB2加载文件?

Database 如何在ETL服务器上按节点分割DB2加载文件?,database,load,db2,etl,Database,Load,Db2,Etl,我正在构建一个DB2“Infosphere”数据仓库,希望有8-16个节点或分区 因为我每天要从1.3-3亿行加载数据,我的加载过程也是我的恢复过程——我希望加载速度尽可能快。在IBM“信息中心”文档中找到此提示并不奇怪: 如果参与分发过程的数据库分区与加载的数据库分区不同,则可以期望更好的性能,因为CPU周期的争用更少 我不想让一个昂贵的DB2节点只用于通过hashkey分割加载文件,因为我的ETL服务器非常便宜(我们使用python,而不是一个许可的商业产品)。另外,由于我依赖于归档的负载进

我正在构建一个DB2“Infosphere”数据仓库,希望有8-16个节点或分区

因为我每天要从1.3-3亿行加载数据,我的加载过程也是我的恢复过程——我希望加载速度尽可能快。在IBM“信息中心”文档中找到此提示并不奇怪:

如果参与分发过程的数据库分区与加载的数据库分区不同,则可以期望更好的性能,因为CPU周期的争用更少

我不想让一个昂贵的DB2节点只用于通过hashkey分割加载文件,因为我的ETL服务器非常便宜(我们使用python,而不是一个许可的商业产品)。另外,由于我依赖于归档的负载进行恢复,因此在向数据库添加节点时,我可能必须转换它们。我希望在ETL服务器上也这样做。注意——我相信DataStage也在ETL服务器上执行此任务,而不是通过DB2

有人能建议我们的python ETL过程如何有效地使用DB2将使用的相同哈希算法和映射表吗?还有其他提示吗

首先,谢谢你:

您不需要在ETL过程中预拆分数据。LOAD实用程序将为您处理数据拆分。python进程可以将要加载的数据写入平面文件,也可以直接写入管道(load实用程序从中读取)。几乎在所有情况下,让数据库为您处理数据分区都会更容易

信息中心关于拆分器占用CPU周期的评论可能不需要担心。这通常仅适用于极端情况,即存在更多数据库分区(即,当需要多个进程拆分数据时)以及数据库节点上的CPU利用率非常高时

从负载角度看,通过预拆分数据节省的时间可以忽略不计。加载数据时的限制因素是将数据写入磁盘,而不是对其进行分区。如果重新加载数据是您的主要恢复方法,那么我不会对此太担心

如果所有这些都不能说服您,并且您确实希望走上让ETL进程分割数据的道路,那么DB2确实提供了一个应用程序可以调用的API(用C表示):db2GetDistMap()和db2GetRowPartNum()。您可以编写一个本机python模块来处理这个问题

在应用程序使用SQL向表中插入行(而不是使用LOAD实用程序)并生成多个线程以独立地向每个分区写入数据(即,每个线程并行地执行转换和加载)的情况下,这些功能最为有用。如果您不能并行化转换部分,那么就不用麻烦了

显然,变量很多,所以YMMV。

首先:

您不需要在ETL过程中预拆分数据。LOAD实用程序将为您处理数据拆分。python进程可以将要加载的数据写入平面文件,也可以直接写入管道(load实用程序从中读取)。几乎在所有情况下,让数据库为您处理数据分区都会更容易

信息中心关于拆分器占用CPU周期的评论可能不需要担心。这通常仅适用于极端情况,即存在更多数据库分区(即,当需要多个进程拆分数据时)以及数据库节点上的CPU利用率非常高时

从负载角度看,通过预拆分数据节省的时间可以忽略不计。加载数据时的限制因素是将数据写入磁盘,而不是对其进行分区。如果重新加载数据是您的主要恢复方法,那么我不会对此太担心

如果所有这些都不能说服您,并且您确实希望走上让ETL进程分割数据的道路,那么DB2确实提供了一个应用程序可以调用的API(用C表示):db2GetDistMap()和db2GetRowPartNum()。您可以编写一个本机python模块来处理这个问题

在应用程序使用SQL向表中插入行(而不是使用LOAD实用程序)并生成多个线程以独立地向每个分区写入数据(即,每个线程并行地执行转换和加载)的情况下,这些功能最为有用。如果您不能并行化转换部分,那么就不用麻烦了


显然,有很多变量,所以YMMV。

谢谢-我期待着对差异进行基准测试。从每十分钟加载一百万行到恢复操作期间每天需要加载30亿行,我在这里非常注重性能。因为我可以并行地转换数据,所以可能很容易通过最终的散列映射来分割我的文件。哦,是的-这是你回答的我的第三个问题-谢谢!谢谢-我期待着对差异进行基准测试。从每十分钟加载一百万行到恢复操作期间每天需要加载30亿行,我在这里非常注重性能。因为我可以并行地转换数据,所以可能很容易通过最终的散列映射来分割我的文件。哦,是的-这是你回答的我的第三个问题-谢谢!