ETL(数据库到数据库)如何适应SOA?

可以想象,我们的应用程序需要从关系数据库到另一个关系数据库的ETL(提取,转换,加载)数据.
最简单(和性能最好的IMHO)方式是在数据库之间建立链接并编写简单的存储过程.在这种情况下,我们使用最小的技术和组件,所有功能都是“开箱即用”.

但是SOA(面向服务的体系结构)的良好做法?紧耦合怎么办?我们是否坚定地将数据库相互联系在一起?

还有另一种方法可以做到这一点:我们在每个方面构建2个java应用程序,并通过SOAP Web服务进行通信.这更加SOA友好!但性能下降和其他失败点值得吗?

在这种情况下最好的做法是什么? ETL如何适应SOA?

解决方法

在SOA中,您可以适应 BiztalkSAP BusinessObjects Data Integrator的处理方式.基本上,它是一个调度程序作业/ Windows服务,或类似的东西.您提供两个服务点,1个为调度程序检索数据,另一个为调度程序发送数据.调度程序在这里的责任只是定期运行和转换数据.

所以,基本步骤是:

步骤1:调度程序运行并从服务A获取数据

Scheduler --get--> Service A
Service A --data--> Scheduler

步骤2:调度器进行数据转换

[ Conversion --> Conversion --> Conversion --> Conversion ]

步骤3:调度程序将数据发送到另一个服务

Scheduler --data--> Service B

在Biztalk和SAP BusinessObject Data Integrator中,这些步骤是可配置的(它们可以从任何服务中检索,并且可以进行脚本数据转换),因此它更加灵活.

然而,仍然存在ETL处理可能会发生的常见问题.例如:数据太大,网络性能影响,RTO,重复数据等.因此,ETL最佳实践在这里仍然是一个要求(使用分段表,日志记录等).

But are the performance degradation and additional points of failure
worth it?

性能影响将会发生,因为现在您有额外的连接/认证步骤(webservice)和运输步骤(通过协议的web服务调度程序).但是出于容易出错的问题,我认为与其他服务调用需要处理的错误相同.

这值得么?这取决于.如果您在相同的环境中工作(相同的数据库),那么这是有争议的.如果您在不同的环境中工作(例如,从Asp.Net到SAP或至少不同的数据库实例两个不同的系统),那么这种体系结构是处理ETL的最佳选择.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...