Java - 非常大的队列(对于堆而言太大)
Java - Very large queue (too big for Heap)
我正在研究一种使用非常大队列的算法。
对于除了玩具问题之外的所有问题,堆都放不下。
作为队列,这很好:性能仅取决于前 N 个条目(出队)和最后 N 个条目(入队),因此将所有中间条目保留在磁盘上就可以了。
是否有可以执行此操作的库或中间件?
如果没有,我该如何实现?
我可以使用 RDBMS,但这是一种算法,我需要非常快速地访问入队和出队,所以我不想使用传统的 RDBMS。
许多数据库可以使用尽可能多的内存来获利 - 在您抱怨它们太慢之前分析您的代码。还可以考虑使用非 RDBMS 存储,例如 REDIS。
如果您决定自己实现它,您可以通过实现 circular buffer on top of a (huge) mmaped file 来构建自己的磁盘支持的出队。您将从指向读写区域的单个 MappedByteBuffer
开始;随着这些区域越来越远,您将开始保持两个不重叠的 MappedByteBuffer
指向写入端和读取端。
我正在研究一种使用非常大队列的算法。
对于除了玩具问题之外的所有问题,堆都放不下。
作为队列,这很好:性能仅取决于前 N 个条目(出队)和最后 N 个条目(入队),因此将所有中间条目保留在磁盘上就可以了。
是否有可以执行此操作的库或中间件?
如果没有,我该如何实现?
我可以使用 RDBMS,但这是一种算法,我需要非常快速地访问入队和出队,所以我不想使用传统的 RDBMS。
许多数据库可以使用尽可能多的内存来获利 - 在您抱怨它们太慢之前分析您的代码。还可以考虑使用非 RDBMS 存储,例如 REDIS。
如果您决定自己实现它,您可以通过实现 circular buffer on top of a (huge) mmaped file 来构建自己的磁盘支持的出队。您将从指向读写区域的单个 MappedByteBuffer
开始;随着这些区域越来越远,您将开始保持两个不重叠的 MappedByteBuffer
指向写入端和读取端。