1

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

有没有办法实现某种缓存机制(分批划分关税并根据需要加载/卸载它们)?或记忆映射关税清单?

我们正在使用休眠进行数据库获取。

4

3 回答 3

0

我猜您的问题实际上是算法问题,而不是内存问题。尝试在树中构建您的数据,并仅加载您在特定时刻跨越的数据分支。完成后,您卸载该分支的数据并加载新分支。这就是我的看法,但可能有更好的算法。这肯定会更慢。

于 2012-06-07T07:36:40.953 回答
0

在 java 中加载和卸载数百万个对象对于内存来说总是太重,而且在 java 中不是最好的事情。我也同意 dystroy 的观点,即休眠在这里不是最好的选择。

事实上,您需要开始考虑将逻辑移到 java 之外,无论是在存储过程中还是在某些本机实现中。

于 2012-06-07T07:15:04.350 回答
0

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

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

你应该 :

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

请注意,评级通常是一个很难的理论问题。例如,请参阅这篇有趣的文章

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

于 2012-06-07T07:54:42.077 回答