【发布时间】:2018-10-10 18:58:06
【问题描述】:
我正在寻找技术解决方案;使用 java spring boot 从一个数据库中查询数据并将其加载到 SQL Server 数据库中。
模拟查询以获取在给定时间 20 小时之间更新的产品名称:
SELECT
productName, updatedtime FROM
products WHERE
updatedtime BETWEEN '2018-03-26 00:00:01' AND '2018-03-26 19:59:59';
这是我们遵循的方法。
1) 其长期运行的 Oracle 查询,在营业时间运行大约 1 小时,并返回约 100 万条记录。
2) 我们必须使用 JDBC 将此结果集插入/转储到 SQL Server 表中。
3) 据我所知,Oracle JDBC 驱动程序支持流式传输。当我们迭代 ResultSet 时,它只会将 fetchSize 行加载到内存中。
int currentRow = 1;
while (rs.next()) {
// get your data from current row from Oracle database and accumulate in a batch
if (currentRow++ % BATCH_SIZE == 0) {
//insert whole accumulated batch into SqlServer database
}
}
在这种情况下,我们不需要将所有来自 Oracle 的庞大数据集存储在内存中。我们将分批 BATCH_SIZE 插入 SqlServer。唯一的事情是我们需要考虑在哪里提交到 SqlServer 数据库。
4) 这里的瓶颈是查询执行等待从 oracle db 获取数据的时间,所以我计划将查询分成 10 个相等的部分,这样每个查询就可以在每小时之间给出更新时间,如图所示。这样每个查询的执行时间也减少到 ~ 10 分钟。 例如: 选择 产品名称,更新时间 FROM 产品在哪里 更新时间介于“2018-03-26 01:00:01”和“2018-03-26 01:59:59”之间;
5.为此,我需要 5 个 Oracle JDBC 连接和 5 个 Sql 服务器连接(用于查询数据并插入数据库)来独立完成其工作。我是 JDBC 连接池的新手 如果连接不使用等,我该如何进行连接池和关闭连接?
如果您有任何其他更好的方法可以快速从数据源获取数据作为实时数据,请提出建议。请建议。提前致谢。
【问题讨论】:
标签: java spring-mvc spring-boot jdbc java-8