【问题标题】:Copy table having millions of records from one database to another - Spring Boot + Spring JDBC将具有数百万条记录的表从一个数据库复制到另一个 - Spring Boot + Spring JDBC
【发布时间】:2017-12-02 06:20:07
【问题描述】:

处理一个必须从其中复制数百万条记录的小示例 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 万条记录,如果运行,spring boot 应用程序会阻塞。

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

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

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

任何建议将不胜感激。

谢谢。

【问题讨论】:

  • 我会将其委托给本机 imp/exp 脚本...但如果您需要在 Java 中执行此操作,则可以选择 Spring Batch + Spring JDBC 操作 (select top X into Y)。跨度>
  • 从 Teradata 导出数据(转换为 CSV 或其他格式)-> 转换 -> 直接导入到 oracle(使用 SQL*Loader 实用程序等工具)适合您吗?这样你就绕过了spring应用
  • 谢谢@Carlos。使用 Top X (1000) 到 Y 本身。现在必须检查如何处理 3600 万条记录。
  • @Sninivas - 该示例对于直接从数据库到数据库的记录数量较少的情况下工作正常 - 不能使用 SQL 加载器 - 实际上使用也可以工作的 spring 调度程序..
  • @Manish 为什么不从Oracle 连接到 Teradata 并在 Oracle 数据库中创建一个存储过程来使用 Bulk Collect 获取数据。最后,从 Java 或 Spring 调用 Oracle 存储过程。

标签: java spring spring-boot spring-jdbc


【解决方案1】:

根据您提供的信息并遵循所选堆栈,我认为您有两种可能性,首先使用 spring batch 创建一个项目,此外还有 spring 批处理管理或 spring 集成来处理休息。第二个实际上使用了大数据概念中的第一个解决方案Spring XD 我建议您使用分析器来尽可能提高性能。

【讨论】:

    【解决方案2】:

    有不同的方法可以解决这个问题:

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

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

    3. 春季批次。请参考这个问题。 Spring RESTful web services - High volume data processing

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

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

    【讨论】:

    • logstash 支持输出到 oracle 吗?我以为它只支持输出到弹性。
    猜你喜欢
    • 1970-01-01
    • 2019-10-22
    • 1970-01-01
    • 2020-09-23
    • 2017-03-24
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    相关资源
    最近更新 更多