Spring Boot应用程序使用多个jdbc连接运行并行查询

时间:2018-10-12 02:11:06

标签: java spring-mvc spring-boot jdbc

我正在寻找一种技术解决方案,以使用Java Spring Boot独立应用程序从一个数据库中查询数据并将其加载到SQL Server数据库中。

select a.student_id
max(decode(a.marks_limit, 99.99,100,null )) as max_marks,
b.student_city_code "NYC",
from student a, student_info b
where a.student_id=b.student_id
and a.student_id in (''a123,'b123','c123')
and  b.adress_modified > TO_TIMESTAMP('2018/09/13 10:13:18', 'YYYY/MM/DD HH:MI:SS')
group by a.student_id, b.student_city_code

我们正在依次运行此oracle查询,该查询需要执行1个小时并执行约3000万条记录,为了更好的结果计划将此查询分为3个类似的查询,因此不要像在运算符中那样在每个查询中使用=在一个查询中为.student_id =“ a123”,在第二个查询中为a.student_id =“ b123”,而在第三个查询中为a.student_id =“ b123”,我相信1小时的时间将减少到每次查询执行约20分钟。

作为一种技术解决方案,它计划并行执行所有多个查询,然后使用Oracle批处理流将结果并行提交到目标表。据我所知,Oracle JDBC驱动程序支持某种流。当我们遍历ResultSet时,它仅将fetchSize行加载到内存中。

请帮助提供示例代码库,以了解如何动态打开多个源和目标JDBC连接并在过程完成后关闭。 Java8具有广泛的软件包。请提出您是否有更好的解决方案。

oracle-jdbc-con1     oracle-jdbc-con2        oracle-jdbc-con3
       |                   |                   |        
       |                   |                   | 
       V                   V                   V 
sql-jdbc-con1          sql-jdbc-con2         sql-jdbc-con3

1 个答案:

答案 0 :(得分:0)

任何类型的程序都将是开销。另外,我假设这是一次活动,不需要应用程序来完成。

我们最近将几张表从MySQL迁移到了MS SQL Server,并尝试了几种选择之后,我们使用了SSMA。

SSMA是MS Sql Server自己的工具,用于从其他数据库引入数据库或架构或表。假设您将单个表从oracle迁移到sql server,它也负责数据类型的转换。

您需要做的只是 -安装SSMA(仅Windows) -配置源和目标数据源 -在Windows应用程序上选择数据库对象 -点击迁移

SSMA具有专用于Oracle OracleToSQL的自有版本 这是introductory Documentations,但是您会发现很多循序渐进的指南。