繁体   English   中英

将包含数百万条记录的表从一个数据库复制到另一个数据库 - Spring Boot + Spring JDBC

[英]Copy table having millions of records from one database to another - Spring Boot + Spring JDBC

处理一个小例子,必须将数百万条记录从teradata数据库复制到Oracle DB。

环境:Spring Boot + Spring JDBC(jdbcTemplate)+ Spring REST + Spring Scheduler + Maven + Oracle + Teradata

使用Spring JDBC的batchUpdate将数据插入目标数据库Oracle。

在源数据库的SQL查询中使用teradata的“前1000名”。

fecthDataResults = repository.queryForList(
                "select top 1000 A, B, C, D, E from " + schemaName + ".V_X");

从视图“V_X”查询。

这个视图有4000万条记录,如果它运行,春季启动应用程序将会阻塞。

还插入目标Oracle DB中的2个表(主表和备份表)。

什么是获取和加载/复制4000万条记录的最佳方法,确保将复制成功完成到2个表中。

Spring Scheduler以指定的时间/间隔计划批量复制。 Spring Rest可以手动调用复制 - 两者都可以实现。

任何建议,将不胜感激。

谢谢。

您可以通过不同的方式解决此问题:

  1. Logstash方法 - 指定源和目标数据,并将数据加载到目标DB。 它具有cron支持,并且logstash可以根据计划运行。 它要快得多。 您可以指定每次要获取的行数。

  2. 使用ETL工具。 如果您确实拥有生态系统,则可以使用任何开源版本。 Talend是一个很好的候选人,你可以设计你的工作并导出为可运行的Jar。 您可以使用您选择的任何组件来安排此操作。

  3. 春批。 请参考这个问题。 Spring RESTful Web服务 - 高容量数据处理

  4. Spring云数据流或Spring引导,MQ作为数据源之间的中间存储。 您可能必须引入消息队列来处理故障转移,回退机制。 高度可靠,可以以异步方式实现。

我的个人意见是与Logstash一起使用。 如果您认为上述任何解决方案都有意义。 如果你愿意,我可以详细说明。

在您提供的信息的基础上以及所选择的堆栈之后,在我看来,您有两种可能性,首先创建一个带有spring批处理的项目,另外还有spring batch admin或spring integration来处理休息。 第二个实际上是使用Spring XD在大数据概念中使用第一个解决方案我建议您使用分析器尽可能地加快性能。

暂无
暂无

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

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