寻找可以处理大量数据的java.util.List实现

时间:2014-06-01 14:47:08

标签: java

我正在尝试解决遗留系统的OOM问题。 经过一些分析,我发现它可以从数据库中查询大量数据,并将它们存储在ArrayList中。 但由于大多数文件都丢失了,我们无法进行太多修改。

所以我想寻找一个可以处理大量数据的List实现。 例如:我可以将所有数据存储在一个文件中,并将1000个元素保存在内存中。如果迭代器或get()尝试访问不在内存中的数据,它可以自动从磁盘中检索数据。

感谢您的任何建议!

1 个答案:

答案 0 :(得分:1)

它所说的List - 可以是有界(数组)或无界(数组列表/链接列表等)的数据列表。因此,没有任何列表类型可以处理巨大数据,尤其是当巨大未定义或未明确定义时。

可以采用以下方法:

  1. 考虑使用可配置的限制,该限制可用于对来自数据库的数据进行分页。每次您的应用程序保证最多从数据库中读取这些行,并因此将它们作为链接列表返回。
  2. 如果可能,请评估代码的使用情况 - 在什么条件下调用此代码?此外,是否有预先成熟的数据库预加载数据优化,以避免在搜索值时进行后续数据库调用?如果这些条件成立 - 那么IMO必须消除这种过早的优化;您可以在数据库中查询特定范围的密钥,并且DB技术已经足够成熟,可以很好地处理这个问题。如果无法进行此更改,那么类似于B树的数据结构将更有用,其中键是从数据库加载的行的主键。只有在创建的树中存在搜索关键字时,才会实际从数据库中检索数据。
  3. 最后也是最不推荐(但最糟糕的情况)选项是调整JVM内存参数以便能够容纳数据。但是,这是一个脆弱且耗时的过程,并且保证迟早会失败
  4. 总结一下 - 每个数据结构和系统都有内存和其他可用的计算资源的限制。因此,了解被测系统的当前功能和局限性,然后开发适当的解决方案以扩展您的应用程序非常重要。

    希望这可以帮助您解决问题。