使用多个 jdbc 连接运行并行查询的 Spring Boot 应用程序
Posted
技术标签:
【中文标题】使用多个 jdbc 连接运行并行查询的 Spring Boot 应用程序【英文标题】:Spring boot application to run parllel querys with multiple jdbc connections 【发布时间】:2018-10-12 02:11:06 【问题描述】:我正在寻找从一个数据库中查询数据并使用 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 个类似的查询,因此不要使用 in 运算符,而是计划在每个查询中使用 =,例如.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
【问题讨论】:
为什么需要使用spring boot来做到这一点?看起来有点矫枉过正。 应该 24/7 或每 1 小时连续运行我们的项目需要它,所以我们需要这样做 【参考方案1】:任何类型的程序都会产生开销。另外,我认为这是一次性活动,不需要应用程序来完成。
我们最近将几个表从 mysql 迁移到 MS SQL Server,在尝试了几个选项后,我们使用了 SSMA。
SSMA 是 MS Sql Server 自己的工具,用于从其他数据库中引入数据库或模式或表。当您迁移时,比如说从 oracle 到 sql server 的单个表,它也会处理数据类型转换。
你只需要 - 安装 SSMA(仅限 Windows) - 配置源和目标数据源 - 在 Windows 应用程序上选择数据库对象 - 点击迁移
SSMA 有自己的版本,专门用于 Oracle OracleToSQL
这是introductory Documentations,但是您会发现很多分步指南。
【讨论】:
以上是关于使用多个 jdbc 连接运行并行查询的 Spring Boot 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有连接的情况下查询多个相关表,并使用 JDBC 获得一致的数据?