我有一个程序,它在开始时生成大量数据(几GB,可能超过10 GB),然后几次处理所有数据,做一些事情,处理所有数据,做一些事情……那么多的数据放不进我的RAM,当它开始分页时,真的很痛苦。存储数据的最佳方式是什么?通常情况下,如何解决此问题?
即使我在程序结束后不需要保存数据,我也应该使用DB吗?我是否应该以某种方式拆分我的数据,然后将其保存到文件中,并在需要时加载它们?或者只是继续使用RAM,不再使用分页?
对于DB和文件,有一个问题。我必须将数据分块处理。所以我加载数据块(比方说500mb),计算,加载下一个块,在我加载并计算完所有内容后,我可以做一些事情,重复这个循环。这意味着我将从HDD中读取与前一个周期中读取的相同数据块。
发布于 2015-11-22 06:08:47
发布于 2015-11-22 06:36:31
发布于 2015-11-22 06:37:17
您绝对应该尝试减少数据量,并使用多个线程来处理数据。
FutureTask可以帮助您:
ExecutorService exec = Executors.newFixedThreadPool(5);
FutureTask<BigDecimal> task1 = new FutureTask<>(new Callable<BigDecimal>() {
@Override
public BigDecimal call() throws Exception {
return doBigProcessing();
}
});
// start future task asynchronously
exec.execute(task1);
// do other stuff
// blocking till processing is over
BigDecimal result = task1.get();同样,如果可能的话,您可以考虑缓存将来的任务,以提高应用程序的速度。
如果还不够,可以使用Apache Spark框架来处理大型数据集。
https://stackoverflow.com/questions/33849112
复制相似问题