Spring XD流或批处理作业

时间:2016-02-24 01:53:37

标签: java spring jdbc spring-xd

我评估Spring XD是从Mongo到Netezza(我们的关系数据仓库)的夜间ETL批处理的替代品。

我的流程需要每天执行一次或多次,我希望每天有数百万条记录,所以我必须进行JDBC批处理:

  1. 通过简单查询获取数据仓库中的最新记录(从xyz'中选择max(lastUpdateDtm))
  2. 使用该时间戳来获取在该日期之后修改的Mongo中的所有记录
  3. 将mongo文档转换/分解为多个JDBC行(' SqlParameterSource'对象)并每10k行左右提交它们
  4. 调用Netezza中的存储过程以更新一些跟踪/历史记录表。
  5. 我看到了两种方法,但两者都有缺点:

    1. 使用spring-xd流(即:"触发器--cron 1 * * * | mongo | jdbc")
      • jdbc接收器不是面向批处理的,我不能承受10万个单独的JDBC插入,所以我可能不得不自己编写接收器。
      • 不太确定如何优雅地执行初始时间戳查找查询,而无需双重定义jdbc参数。第4步也一样。
    2. 使用具有初始时间戳查找tasklet的批处理作业,并使用MongoReader和JdbcBatchWriter然后组成类似这样的流" trigger --cron 1 * * *>队列:作业:myBatchJob"
      • 这似乎不太可重用,可能更多工作
    3. 有任何建议或建议吗?

1 个答案:

答案 0 :(得分:0)

由于批处理作业更适合您的用例(对于面向块的处理等),您可能希望根据批处理作业通知构建一个触发批处理作业的流(在每个步骤)(来自上一步)。

要使用工作通知,您可以在此处参考:http://docs.spring.io/spring-xd/docs/current-SNAPSHOT/reference/html/#_retrieve_job_notifications