我必须从数据库中读取大量数据(例如,考虑超过500 000条记录)。然后,我必须将读取的数据保存到文件中。我有很多游标问题(不仅是内存问题)。
是否可以在没有光标的情况下执行此操作,例如使用流?如果可以,我该如何实现?
答案 0 :(得分:1)
我在处理海量数据(近5亿条记录)方面经验丰富。我只使用了PreparedStatement查询,ResultSet,并通过一些缓冲来调整缓冲区:
setFetchSize(int)
在我的情况下,由于将巨大的表进行了分区(每个线程处理了一个分区),所以我将程序拆分为多个线程,但是我认为这不是您的情况。 通过游标获取数据毫无意义。我宁愿使用数据库视图或SQL查询。请勿为此使用ORM。
根据您的评论,最好的选择是限制JDBC仅获取特定数量的行,而不是获取所有行(这有助于更快地开始处理,并且不会将整个表加载到ResultSet中)。将数据保存到集合中,然后使用BufferedWriter将其写入文件。您还可以受益于多核CPU,使其运行在更多线程中-例如第一个提取的行在1个线程中运行,其他提取的行在第二个线程中运行。如果使用线程,请使用同步的集合,并注意您可能会面临订购问题。