【问题标题】:Java - Very large queue (too big for Heap)Java - 非常大的队列(对于堆来说太大)
【发布时间】:2016-06-04 17:14:23
【问题描述】:

我正在研究一种使用非常大队列的算法。
除了玩具问题之外,它太大了,无法放入堆中。
作为一个队列,这很好:性能仅取决于前 N 个条目(出队)和最后 N 个条目(入队),因此将所有中间部分保留在磁盘上就可以了。

是否有可以做到这一点的库或中间件?
如果没有,我该如何实现?

我可以使用 RDBMS,但这是一种我需要非常快速地访问入队和出队的算法,所以我不想使用传统的 RDBMS。

【问题讨论】:

  • 你知道吗,你能说出堆和队列的大小吗?

标签: java algorithm data-structures heap-memory large-data


【解决方案1】:

许多数据库可以使用尽可能多的内存来获利 - 在您抱怨它们太慢之前分析您的代码。还可以考虑使用非 RDBMS 存储,例如 REDIS。

如果您决定自己实现它,您可以通过在(巨大的)mmaped file 之上实现circular buffer 来构建您自己的磁盘支持的 Dequeue。您将从一个指向读写区域的MappedByteBuffer 开始;随着这些区域的距离越来越远,您将开始保持两个不重叠的MappedByteBuffers 指向写入端和读取端。

【讨论】:

    猜你喜欢
    • 2013-06-07
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    • 2019-07-29
    相关资源
    最近更新 更多