如何使用 talend 和 sql server 更快地加载数据

2023-11-22

我使用 Talend 将数据加载到 sql-server 数据库中。

看来我的工作最薄弱的地方不是数据处理,而是数据库中的有效负载,其速度不超过 17 行/秒。

有趣的是,我可以同时启动 5 个作业,它们都将以 17 行/秒的速度加载。

什么可以解释这种缓慢以及如何提高速度?

Thanks

新信息:

我的桌面和服务器之间的传输速度约为1MByte

我的工作承诺每 10 000

我使用的是sql server 2008 R2

我在工作中使用的模式是这样的:

enter image description here


数据库INSERT OR UPDATE方法的成本非常高,因为数据库无法一次性批处理所有提交,并且必须逐行执行它们(ACID 事务强制执行此操作,因为如果它尝试执行插入然后失败,则此提交中的所有其他记录也会失败)。

相反,对于大批量操作,最好在将提交传递到数据库之前预先确定是否插入或更新记录,然后向数据库发送 2 个事务。

需要此功能的典型工作将组装要处理的数据INSERT OR UPDATEd然后查询数据库表中现有的主键。如果主键已经存在,那么您可以将其作为UPDATE,否则它是一个INSERT。这个逻辑可以很容易地完成tMap成分。

Insert or Update Job Example

在这项工作中,我们有一些我们希望的数据INSERT OR UPDATE到包含一些预先存在的数据的数据库表中:

Initially loaded data

我们希望向其中添加以下数据:

Insert or Update data

这项工作的工作原理是将新数据放入tHashOutput组件,因此它可以在同一作业中多次使用(它只是将其放入内存,或者在大型实例中可以将其缓存到磁盘)。

接下来,从 a 中读取大量数据tHashInput组件并直接进入tMap。其他tHashInput组件用于对表运行参数化查询:

Parameterised Query Parameter Config

你可能会发现本 Talend 和参数化查询指南有用。从这里返回的记录(因此只有数据库中已经存在的记录)被用作对tMap.

然后将其配置为INNER JOIN找到需要的记录UPDATED与拒绝INNER JOIN待插入:

tMap configuration

然后这些输出就流向单独的tMySQLOutput组件到UPDATE or INSERT有必要的。最后,当主要子作业完成后,我们commit变化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 talend 和 sql server 更快地加载数据 的相关文章

随机推荐