拆分JDBC Oracle Resultset以避免OOM错误

时间:2014-11-11 21:09:46

标签: java oracle memory jdbc

我有一个程序通过JDBC连接到oracle数据库并提取超过3百万条记录。如果我将所有内容加载到内存中,我将收到内存不足错误。我想将数据加载到50000的部分内存中。

我正在接触这个问题的方法有两种: a)保持连接打开,并将数据处理成50 0000的组,因为它们来自结果集。 我真的不喜欢这种方法,因为当所有事情都完成时,可能存在打开连接的风险,并且连接可能会长时间打开(冒着超时和减少连接池的风险),因为每组50 000条记录正在进行处理(并且通过处理我的意思是每个都可能导致其他连接根据可能需要的派生数据快速打开和关闭) b)基于行号的处理但我不确定如果底层数据发生变化会产生什么影响,而且每次处理50 000条记录时我都无法负担得起。

这似乎是一个常见问题,我想知道这个问题的行业标准/最佳方法/设计模式是什么。

1 个答案:

答案 0 :(得分:0)

如果你需要一个跨越整个读取的持久性事务(也就是你所提到的,没有人从你下面改变数据),你可能想调查将这个问题移到rdbms,并将其编码为存储过程您可以从jdbc / jpa / whatever调用。

我知道它并没有从java方面解决它,但有时候移动问题是正确的解决方案,具体取决于上下文和细节。

欢呼声