正在研究一个小示例,必须从中复制数百万条记录 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");
从 View “V_X”查询。
此 View 有 4000 万条记录,如果运行 Spring Boot 应用程序,将会出现阻塞。
还插入目标 Oracle 数据库中的 2 个表(主表和备份表)。
获取并加载/复制 4000 万条记录的最佳方法是什么,以确保成功复制到 2 个表中。
Spring Scheduler 安排在指定时间/间隔进行批量复制。 Spring Rest 手动调用复制 - 两者都已实现。
如有任何建议,我们将不胜感激。
谢谢。
最佳答案
有多种方法可以解决此问题:
Logstash 方法 - 指定源数据和目标数据并将数据加载到两个目标数据库。它有 cron 支持,logstash 可以根据时间表运行。速度相当快。您可以指定每次要获取的行数。
使用 ETL 工具。如果您确实拥有适当的生态系统,则可以使用任何开源版本。 Talend 是一个很好的选择,您可以在其中设计您的作业并将其导出为可运行的 Jar。您可以使用您选择的任何组件来安排此操作。
Spring 批处理。请引用这个问题。 Spring RESTful web services - High volume data processing
Spring Cloud Data Flow 或 Spring boot,使用 MQ 作为数据源之间的中间存储。您可能必须引入消息队列来处理故障转移、回退机制。高度可靠,可以以异步方式实现。
我个人的意见是使用 Logstash。如果您觉得上述任何解决方案有意义。如果您愿意,我可以详细说明。
关于java - 将具有数百万条记录的表从一个数据库复制到另一个数据库 - Spring Boot + Spring JDBC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44810039/