在java中处理大型数据列表

时间:2012-06-07 06:52:30

标签: java memory

我正在制定一个评级系统,在评级之前将数百万的关税计划加载到内存中, 关税计划清单每天都在增长(有时每天> 2万条记录),从过去几周开始,我们面临记忆问题。 由于某些业务规则,基于日期标准加载一定数量的关税也是不可行的。

有没有办法实现某种缓存机制(按批次划分关税并根据需要加载/卸载)? 或者记录关税清单?

我们正在使用hibernate进行数据库提取。

3 个答案:

答案 0 :(得分:0)

在java中加载和卸载数百万个对象对于内存来说总是太重了,并且在java中不是最好的事情。我同意破坏,冬眠不是最好的选择。

事实上,您需要开始考虑在存储过程或某些本机实现中移动java之外的逻辑。

答案 1 :(得分:0)

我猜你的问题确实是一个算法问题而不是内存问题。尝试在树中构建数据并仅加载您在特定时刻穿过的数据分支。完成后,卸载该分支的数据并加载新分支。这就是我看到的方式,但可能有更好的算法。这肯定会变慢。

答案 2 :(得分:0)

在处理这些数字时,你必须定义一个与问题非常精确相关的策略,所以我们无法回答,因为我们不知道在内存和读/写操作中真正需要什么。

当你必须精确管理加载和卸载时,几乎可以肯定使用像hibernate这样的东西是个坏主意。

你应该:

  • 定义评级要求(可能已经完成)
  • 检查不能以通常的方式完成(有许多评级系统和已知策略)
  • 要求(例如在https://softwareengineering.stackexchange.com/上)了解您的评分
  • 只有这样我们才能说你应该使用RandomAccessFile和nio频道,还是jdbc和智能加载,或只是一些查询

小心评级通常是一个很难理论的问题。例如,请参阅this interesting article

作为一个更直接的答案元素,我会说我使用RandomAccessFile和FileChannel对许多同时打开的4个Go文件进行非常快速的读写。