处理一个必须从中复制数百万条记录的小例子 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可以手动调用复制 - 两者都可以实现。
任何建议将不胜感激。
感谢。
答案 0 :(得分:3)
您可以通过不同的方式解决此问题:
Logstash方法 - 指定源和目标数据并将数据加载到目标DB。它具有cron支持,并且logstash可以根据计划运行。它要快得多。您可以指定每次要获取的行数。
使用ETL工具。如果您确实拥有生态系统,则可以使用任何开源版本。 Talend是一个很好的候选人,你可以设计你的工作并导出为可运行的Jar。您可以使用您选择的任何组件来安排此操作。
Spring Batch。请参考这个问题。 Spring RESTful web services - High volume data processing
Spring云数据流或Spring引导,MQ作为数据源之间的中间存储。您可能必须引入消息队列来处理故障转移,回退机制。高度可靠,可以以异步方式实现。
我个人的意见是与Logstash一起使用。如果您认为上述任何解决方案都有意义。如果你愿意,我可以详细说明。
答案 1 :(得分:0)
在您提供的信息的基础上以及所选择的堆栈之后,在我看来,您有两种可能性,首先使用spring batch创建一个项目,另外还有spring batch admin或spring integration来处理休息。第二个实际上使用Spring XD在大数据概念中使用第一个解决方案。我建议您使用分析器尽可能地加快性能。