我正在开发一个在某些系统上进行数据库交互的界面。作为我工作的一部分,我应该查询源数据库,调用一些过程,获取引用游标中的数据并填充目标数据库。
由于数据量可能很大,我在目标数据库上使用多线程来调用该过程。例如,如果应该加载的条目总数为1百万,那么在目标数据库上,将调用该过程,例如10次,每次记录100K记录。
这种安排工作正常,除非源数据库中的数据量很大(超过200万条目)。我已经设置了大约20 GB的堆空间来处理记录,但是我的程序因堆内存错误而失败。
我想知道是否有办法在并行模式下查询源数据库中的数据(例如,假设从源存储过程中总共获取了200万条记录,我的程序应首先获取子集这个记录,然后继续下一个或类似的东西)。
我提出的一个解决方案是通过db方式以这种方式发送记录,但我想知道是否有更好的替代方案。 请建议
答案 0 :(得分:0)
我找到了解决方法。 Spring API中的BeanPropertyRowMapper类需要扩展,您需要覆盖mapRow方法。准备好提取数据时调用mapRow方法。您可以在此阶段应用某种批处理机制。请注意,我发布了问题,因为使用存储过程获取数据,输出以参考光标的形式出现。