我正在研究一种使用非常大的队列的算法。对于除玩具问题以外的所有问题,它太大而无法装入堆中。作为一个队列,这很好:性能仅取决于前N个条目(出队)和最后N个条目(入队),因此将所有中间保留在磁盘上是可以的。是否有可以执行此操作的库或中间件?如果没有,我该如何实施呢?
我可以使用RDBMS但是,这是一种算法,我需要非常快速地访问入队和出队,所以我不想使用传统的RDBMS。
答案 0 :(得分:1)
许多数据库可以盈利地使用尽可能多的内存 - 在您抱怨它们太慢之前对代码进行概要分析。还要考虑使用非RDBMS存储,例如REDIS。
如果您决定自己实施,可以通过在(巨大的)circular buffer之上实施mmaped file来构建自己的磁盘备份Dequeue。您将从指向读写区域的单个MappedByteBuffer
开始;当这些区域进一步分开时,您将开始保持两个不重叠的MappedByteBuffer
指向写端和读端。