我正在寻找我们的项目要求之一的技术解决方案,但无法在谷歌得到正确的方法。
以下是要求。
1)我们长期运行Oracle查询,它在工作时间运行大约1.5小时,并返回大约1000万条记录。
2)我们必须使用Java编程将此结果集插入/转储到Sqlserver Db表中。
以下是我对此要求的担忧。使用Sql Query检索所有记录时,它可能会出现(Out of memory)错误。它可能会导致网络超时等
计划用Spring批处理/ kafka流处理器等,不确定它是否可以实现。请建议Java最佳方法/技术,以解决任何问题
发布于 2018-10-11 10:00:24
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中的所有大型数据集存储在内存中。并且将按批次插入到SqlServer中BATCH_SIZE
。唯一的问题是你需要考虑在哪里提交到SqlServer数据库。
https://stackoverflow.com/questions/-100005062
复制相似问题