我正在制定一个评级系统,在评级之前将数百万的关税计划加载到内存中, 关税计划清单每天都在增长(有时每天> 2万条记录),从过去几周开始,我们面临记忆问题。 由于某些业务规则,基于日期标准加载一定数量的关税也是不可行的。
有没有办法实现某种缓存机制(按批次划分关税并根据需要加载/卸载)? 或者记录关税清单?
我们正在使用hibernate进行数据库提取。
答案 0 :(得分:0)
在java中加载和卸载数百万个对象对于内存来说总是太重了,并且在java中不是最好的事情。我同意破坏,冬眠不是最好的选择。
事实上,您需要开始考虑在存储过程或某些本机实现中移动java之外的逻辑。
答案 1 :(得分:0)
我猜你的问题确实是一个算法问题而不是内存问题。尝试在树中构建数据并仅加载您在特定时刻穿过的数据分支。完成后,卸载该分支的数据并加载新分支。这就是我看到的方式,但可能有更好的算法。这肯定会变慢。
答案 2 :(得分:0)
在处理这些数字时,你必须定义一个与问题非常精确相关的策略,所以我们无法回答,因为我们不知道在内存和读/写操作中真正需要什么。
当你必须精确管理加载和卸载时,几乎可以肯定使用像hibernate这样的东西是个坏主意。
你应该:
小心评级通常是一个很难理论的问题。例如,请参阅this interesting article。
作为一个更直接的答案元素,我会说我使用RandomAccessFile和FileChannel对许多同时打开的4个Go文件进行非常快速的读写。