当前位置: 首页 > 知识库问答 >
问题:

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

周宏伯
2023-03-14

在一个小例子中,我们必须将数以百万计的记录从teradata数据库复制到Oracle DB。

环境:Spring Boot Spring JDBC(jdbcTemplate)Spring REST Spring调度程序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数据库中的两个表(主表和备份表)。

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

Spring Scheduler在指定的时间/间隔安排批处理副本。Spring Rest手动调用复制-两者都已实现。

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

谢谢。

共有2个答案

壤驷喜
2023-03-14

根据您提供的信息,并遵循所选择的堆栈,我认为您有两种可能性,首先使用spring batch和spring batch admin或spring integration创建一个项目来处理rest。事实上,第二个使用了Spring XD的大数据概念中的第一个解决方案。我建议您使用探查器尽可能提高性能。

轩辕季同
2023-03-14

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

>

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

    使用ETL工具。如果你有合适的生态系统,你可以选择任何开源版本。Talend是一个很好的候选人,你可以设计你的工作,并导出为runnable Jar。您可以使用自己选择的任何组件来安排这项工作。

    Spring Batch。请参阅此问题。Spring RESTful Web服务-大容量数据处理

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

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

  •  类似资料:
    • 问题内容: 如何从一个数据库复制到另一个数据库。 数据库名称visco 我想将所有表从visco数据库复制到新数据库名称作为neptune 我创建了一个没有任何表的数据库,然后尝试从database1.bak文件还原数据库,然后显示错误为 需要查询帮助 问题答案: 使用SQL Server Management Studio: 选项1 ->右键单击要复制的数据库 ->选择“任务”>“生成脚本” -

    • 问题内容: 我有两个数据库,一个叫做,一个叫做。由于我想练习插入,更新内容,因此我想将某些表从复制到。 我要复制的表称为: 我试图做的是(使用SSMS)右键单击表格,但其中没有“复制”! 问题答案: 假设您有两个数据库,例如A和B: 如果目标表不存在,将创建以下脚本(我不建议这样): INTO COPY_TABLE_HERE FROM A.dbo.table_from_A table_A 如果目标

    • 问题内容: 有一个数据库,它在一个表中大约包含200万条记录。我从我的Java代码中运行查询,例如“ select * from table”。是否将从结果集中的数据库中获取完整数据。或不 。如果是,那么它将如何工作,我想学习此检索工作, 请让我知道,我在某处了解到它将从数据库中检索完整的数据并将其存储在临时存储中,并在输出中显示出来。还是与J2C有关 问题答案: 它会从结果集中的数据库中获取完整

    • 问题内容: 我需要将数据从一个表复制到另一个表。这两个表几乎具有相同的结构,但是位于不同的数据库中。 我试过了 我尝试此操作,但跨数据库出现错误…未实现 问题答案: 这是一个非常简单的任务。只需为此目的使用dblink: 如果您需要定期从外部数据库中获取数据,明智的做法是定义服务器和用户映射。然后,您可以使用较短的语句:

    • 问题内容: 我需要将表从一个数据库复制到另一个数据库。这将是一个cronjob。哪一种是最好的方法?PHP脚本或Shell脚本。PHP的问题是,两个数据库都有不同的用户名和密码,所以我不能这样做。 我应该只连接第一个DB以获得所有记录,然后使用WHILE循环将所有记录插入新数据库,还是有更好的方法? 我更喜欢用shell脚本代替PHP脚本来执行此操作。 谢谢 问题答案: 我把它丢了。比任何基于PH

    • 问题内容: 我正在尝试将数据从一个数据库复制到另一个数据库。一切工作正常,直到修改了源数据库中的一行之一(下面的堆栈跟踪)。按预期将新行添加到目标数据库。 对于每个数据库连接(mysql和hsqldb),我都有一个由以下bean组成的上下文文件: 在我为每个数据库连接中创建一个: 很简单: 我正在使用Spring Integration将2种服务方法连接在一起。服务方法如下: 我尝试过从s 分离列