我使用 Talend 将数据加载到 sql-server 数据库中。
看来我的工作最薄弱的地方不是数据处理,而是数据库中的有效负载,其速度不超过 17 行/秒。
有趣的是,我可以同时启动 5 个作业,它们都将以 17 行/秒的速度加载。
什么可以解释这种缓慢以及如何提高速度?
Thanks
新信息:
我的桌面和服务器之间的传输速度约为1MByte
我的工作承诺每 10 000
我使用的是sql server 2008 R2
我在工作中使用的模式是这样的:
数据库INSERT OR UPDATE
方法的成本非常高,因为数据库无法一次性批处理所有提交,并且必须逐行执行它们(ACID 事务强制执行此操作,因为如果它尝试执行插入然后失败,则此提交中的所有其他记录也会失败)。
相反,对于大批量操作,最好在将提交传递到数据库之前预先确定是否插入或更新记录,然后向数据库发送 2 个事务。
需要此功能的典型工作将组装要处理的数据INSERT OR UPDATEd
然后查询数据库表中现有的主键。如果主键已经存在,那么您可以将其作为UPDATE
,否则它是一个INSERT
。这个逻辑可以很容易地完成tMap
成分。
在这项工作中,我们有一些我们希望的数据INSERT OR UPDATE
到包含一些预先存在的数据的数据库表中:
我们希望向其中添加以下数据:
这项工作的工作原理是将新数据放入tHashOutput
组件,因此它可以在同一作业中多次使用(它只是将其放入内存,或者在大型实例中可以将其缓存到磁盘)。
接下来,从 a 中读取大量数据tHashInput
组件并直接进入tMap
。其他tHashInput
组件用于对表运行参数化查询:
你可能会发现本 Talend 和参数化查询指南有用。从这里返回的记录(因此只有数据库中已经存在的记录)被用作对tMap
.
然后将其配置为INNER JOIN
找到需要的记录UPDATED
与拒绝INNER JOIN
待插入:
然后这些输出就流向单独的tMySQLOutput
组件到UPDATE
or INSERT
有必要的。最后,当主要子作业完成后,我们commit
变化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)