繁体   English   中英

使用Spring Batch进行ETL的最佳实践?

[英]Best practice of ETL using Spring Batch?

我正在使用Spring Batch将大量在线数据提取-转换-加载到数据仓库中以进行推荐分析。 两者都是RDBMS。

我的问题是,离线Spring Batch ETL的最佳实践是什么? 满负荷还是增量负荷? 我更喜欢Full Load,因为它更简单。 目前,我正在将以下步骤用于数据加载工作:

步骤1:截断数据仓库中的表A;
步骤2:将数据加载到表A中;
步骤3:截断数据仓库中的表B;
步骤4:将数据加载到表B中;
步骤5:截断数据仓库中的表C;
步骤6:将数据加载到表C中;
...

实时推荐系统处理使用数据仓库中的那些表ABC ,...。

但是由于我从在线数据库加载的数据量很大,因此整个作业处理将非常耗时。 因此,如果我截断一个表并且尚未将数据加载到该表中,那么依赖于该表的实时推荐处理将遇到很大的问题。 如何防止这种数据不完整的情况发生? 使用登台表还是类似的策略?

任何答复将不胜感激。

您有两种选择:

  • 使用源表上的审核日志来确定目标中需要更新的记录。 这是批处理ETL的最佳选择,但它需要在源系统中打开审核日志记录。 如果您有能力打开审核功能,而这不会成为性能问题,那么这就是要走的路。

  • 如果源表中没有删除(仅插入和更新),则可以使用记录块从目标到源进行完全读/写。

    根据目标数据库引擎,您将具有执行更新的不同选项。 有些可能要求您尝试执行写尝试(插入或更新); 如果失败,则必须捕获异常并执行其他写操作。 (例如,尝试插入。如果捕获了DuplicateKeyException ,则必须进行更新。根据插入与更新的比率,可以将插入/更新的顺序反转为更新/插入)。

    其他引擎允许MERGE,MERGE允许一步更新/插入/删除。

    这种方法仍然可以移动大量数据,但是对目标的影响最小。 当然,这假定您能够以不存在参照完整性问题的方式来订购表更新。 阅读时写入目标。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM