我需要一个解决方案,从一个数据库实例(DB1)获取整个表,并在另一个数据库实例(DB2)上创建相同的表。之前我使用过Spring Integration,但我听说Spring Batch可以更好地适应这种情况,我想尝试一下。
因此,是否有可能/有意使用Spring Batch作业,并执行以下步骤:
使用Spring集成我看到JdbcInboundChannelAdapter -> QueueChannel -> OutboundGateway
可能的解决方案,但是Spring Batch可能是更好的选择吗?任何建议都非常赞赏。
答案 0 :(得分:1)
这取决于您的要求。
我们最初使用spring-batch加载DWH。但这不是一个简单的一对一副本。生产数据库中的数据存储在垂直表设计(aka entity-attribute-value-model)中。此外,每个条目也是双时态的历史。总而言之,这些行大约有5&000,000和000,000行,必须根据正确的时间维度进行分组并转换为水平数据库设计。当然,这是从DB2到Oracle。
所以我们必须显着转换结构,必要时我们必须转换数据类型,我们有50亿行要处理。
如果你在同一个数据库系统中只有一个普通的1:1副本,那么最简单的方法就是使用数据库工具。
如果必须在不同的数据库系统之间进行转移,可以选择弹簧批量。
如果您必须转换结构或类型的数据,可以选择弹簧批。
如果你有很多行,你可以使用spring批处理的分区功能来并行化,或者只是用不同的id-range启动相同的工作几次。
如果要复制多个表,可以使用拆分流并行加载各个表中的数据。
在我目前正在与之合作的公司,我们拥有完全通用的文件/ Db读写器,它们完全基于数据库元模型。如果我想做一个简单的复制工作,我只需要将源和目标数据源与所需的表一起定义,并适当地初始化读者和编写者。如果名称匹配,我甚至不必添加配置来映射表之间的数据。
这引出了以下基本问题
答案 1 :(得分:1)
我已使用我在其他帖子中描述的配置解决了我的任务:How should I use .tasklet() / .chunk() to finish job succesfully?。谢谢大家!