如何处理大型数据列表

Edw*_*ges 2 java algorithm collections list large-data-volumes

我们有一个应用程序,其中,说的一部分,它需要一个时间来阅读20%巨大超出内存限制数据量.虽然我们可以增加内存限制,但我们不愿意这样做,因为它需要在大多数情况下都没有必要时进行高分配.

当我们达到这样的峰值负载时,我们正在考虑使用自定义的java.util.List实现来假脱机到磁盘,但在较轻的情况下将保留在内存中.

数据一次加载到集合中,随后迭代并处理,然后丢弃.它不需要在集合中进行排序.

有没有人对这种方法有利弊?

是否有一个开源产品提供这样的List impl?

谢谢!

更新:

  • 不是厚颜无耻,而是"巨大",我的意思是超出我们愿意分配的内存量,而不会干扰同一硬件上的其他进程.你需要什么其他细节?
  • 该应用程序本质上是一个批处理器,它从多个数据库表中加载数据并在其上执行广泛的业务逻辑.列表中的所有数据都是必需的,因为聚合操作是完成逻辑的一部分.
  • 我刚刚看到这篇文章提供了一个非常好的选择:STXXL相当于Java

Kev*_*ion 6

你真的需要使用List吗?编写Iterator的实现(可能有助于扩展AbstractIterator),而不是逐步执行数据.然后,您可以使用该迭代器来使用这些有用的实用程序.这些都不会导致大量数据急切地加载到内存中 - 相反,只有在迭代器处于高级状态时才会从源中读取记录.