对于比堆大的基于JVM的队列,存在哪些解决方案?

时间:2011-07-18 06:16:41

标签: java jvm queue

我正在研究基于JVM的系统中队列的可能技术选择(或者可能是更好的描述)。

一些要求:

  • 必须可以从JVM / Java访问。
  • 队列必须支持大于JVM堆的大小,可能大于所有可用RAM。因此,隐含了对利用磁盘(或网络)进行存储的支持。
  • 队列目前不需要在整个过程生命周期内持久。
  • 队列的大多数用途都有一个生产者和一个消费者。因此,任何特定队列的并发性都不是问题。 (显然,并发在队列中很重要。)
  • 队列是临时的和临时的。它们存在,被填满,被排干,然后消失。
  • 小队列最好留在内存中,然后根据资源可用性转移到较慢的存储。在排队技术之上可以满足此要求。

我正在研究几个选项,但我很好奇我缺少哪些选项?

5 个答案:

答案 0 :(得分:1)

使用可用的JMS实现之一。例如来自雅加达的ActiveMQ或Qpid。

答案 1 :(得分:1)

我遇到了这个FIFO队列,溢出到磁盘,这很有趣,并且有一些我正在寻找的属性:

http://code.google.com/p/ashes-queue/

答案 2 :(得分:1)

我曾考虑使用Terracotta的BigMemory作为将队列数据推送到直接内存和堆外的工具。

答案 3 :(得分:0)

如何将Redis用作消息传递队列。它支持内存中存储,并且一旦数据不适合RAM就可以保持持久性。

答案 4 :(得分:0)

HSQLDB提供了一个进程内数据库引擎,您可以使用RAM,本地磁盘或网络服务器来存储数据库。这可能会漂浮你的船,特别是如果你想在以后无缝移动到网络解决方案而不是本地磁盘。从小队列到大队列的转换将涉及将数据从一个数据库移动到另一个数据库。有标准的方法可以做到这一点,但它们可能很慢。

我想的更多,我认为这不是一个很好的匹配。对于它的价值,内存数据库的使用速度非常快。