2013-03-11 67 views
0

我正在研究一些在某些系统上进行数据库交互的接口。作为我工作的一部分,我应该查询源数据库,调用某个过程,获取参考游标中的数据并填充目标数据库。处理海量数据量

由于数据量可能很大,我在目标数据库上使用多线程来调用该过程。例如,如果应该加载的条目总数为1百万,则在目标数据库上,该过程将被调用10次,每次记录100K条记录。

这种安排工作正常,除非源数据库中的数据量很大(对于超过200万个条目)。我已经设置了大约20 GB的堆空间来处理记录,但是我的程序因堆内存错误而失败。

我想知道是否有一种方法来查询源数据库并行模式下的数据(例如,假设总共有200万条记录从源存储过程中获取,我的程序应该首先获取这个记录的子集,然后继续下一个或类似的东西)。

我提出的解决方案之一是以这种方式发送记录,虽然数据库端,但我想知道是否有更好的选择。 请建议

+0

你可以对数据的子集发出不同的查询...添加WHERE id在第一次运行时id <10000,然后WHERE id> 10000和id <20000,用于下次运行等等 – Randy 2013-03-11 19:23:58

+0

我从来没有看到一个“真实”的数据库,在这个数据库中,不可能限制一次检索到的记录数量(尽管我确信这里有人能够识别出一个)。 SQL有LIMIT和OFFSET关键字。 – 2013-03-11 19:34:53

回答

0

我找到了解决方案。 Spring API中的BeanPropertyRowMapper类需要扩展,您需要重写mapRow方法。当数据准备好被提取时调用mapRow方法。您可以在此阶段应用某种配料机制。请注意,我在使用存储过程获取数据时发布了问题,并且输出以参考光标的形式出现。