我正在使用C#处理数据仓库的ETL过程,它支持SQL Server和Oracle.在开发过程中,我一直在编写存储过程,将数据从一个数据库同步到另一个数据库.存储过程代码相当丑陋,因为它涉及动态SQL.它需要构建SQL字符串,因为我们有动态数据库名称.
我的团队负责人希望使用C#代码来执行ETL.我们有代码生成,可在数据库定义更改时自动生成新类.这也是我决定不使用Rhino ETL的原因.
以下是优点和缺点:
存储过程:
优点:
>快速加载过程,一切都由数据库处理
>易于部署,无需编译
缺点
>由于动态SQL导致可读性差
>在数据库定义更改时,需要维护T-SQL和PL / SQL脚本
>开发速度慢,因为在编写动态SQL时没有智能感知
C#代码:
优点:
>更容易开发ETL过程,因为我们从生成的类中获得智能感知
>由于生成的类更容易维护
>更好的日志记录和错误处理
缺点:
>与存储过程相比性能较慢
我更喜欢使用应用程序代码来执行ETL过程,但与存储过程相比,性能非常糟糕.在一次测试中,当我尝试更新10,000行时.存储过程只用了1秒,而我的ETL代码用了70秒.即使我以某种方式设法减少开销,70%的20%纯粹是从应用程序代码调用更新语句.
有人可以提供有关如何使用应用程序代码加速ETL过程的建议或评论吗?
我的下一个想法是尝试通过打开多个数据库连接并执行更新和插入来执行并行ETL过程.
谢谢