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

标签 java spring 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");

从 View “V_X”查询。

此 View 有 4000 万条记录,如果运行 Spring Boot 应用程序,将会出现阻塞。

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

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

Spring Scheduler 安排在指定时间/间隔进行批量复制。 Spring Rest 手动调用复制 - 两者都已实现。

如有任何建议,我们将不胜感激。

谢谢。

最佳答案

有多种方法可以解决此问题:

  1. Logstash 方法 - 指定源数据和目标数据并将数据加载到两个目标数据库。它有 cron 支持,logstash 可以根据时间表运行。速度相当快。您可以指定每次要获取的行数。

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

  3. Spring 批处理。请引用这个问题。 Spring RESTful web services - High volume data processing

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

我个人的意见是使用 Logstash。如果您觉得上述任何解决方案有意义。如果您愿意,我可以详细说明。

关于java - 将具有数百万条记录的表从一个数据库复制到另一个数据库 - Spring Boot + Spring JDBC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44810039/

相关文章:

java - 使用 postman 复制请求代码的 400 错误请求

java - 使用 Spring 访问 XmlBeanFactory 的更好设计

java - Spring-Boot:使用 Redis 作为 Session Store 时出现异常

java - Spring Boot @GenerateValue(strategy = GenerationType.IDENTITY) 不起作用

spring - 在类路径资源中定义名称为 'defaultValidator' 的 bean 创建时出错

java - 当用户在我的聊天中收到其他用户的新消息时,如何创建通知?

java - 如何从SD卡或android中的指定路径读取csv文件

rest - spring boot data rest findby traverson to java对象

java - 需要将 CSV 文件中的所有信息存储到数组中

spring - @EnableJpaRepositories 正在寻找哪个包?