2012-12-13 59 views
0

我正在寻找BlockingQueue的功能,它将磁盘而不是内存排队。我宁愿避免使用重量级解决方案(例如JMS)。理想情况下,队列应该在与JVM上的客户端(生产者)和使用者相同的进程中运行。如果消费者停止,它应该能够继续排队,并且也可以在重新启动后继续。是否有JVM的持久队列库?

+0

如何在关系表上进行黑客攻击?这种方法有一些优点。 – usr

+0

这很诱人,但是我已经阅读了一些有关队列数据库是反模式的文章,所以我在追求这种方法时有些sk sk不安。我见过一些使用berkley db(java版)的解决方案 – Andrew

回答

1

如何在关系表上进行黑客攻击?这种方法有一些优点。

它可能是一种反模式,有时它是。有一些陷阱(特别是如果没有特殊照顾,争议可能会很高)。

但也有一些有意义的优势:您可以将队列数据与其他数据集成,获得ACID语义,获得一致的备份(您无法获得任何外部队列,因为您无法在与数据库完全相同),并在项目中使用新技术进行保存。

为每个队列项分配状态和索引。

这是一个简单的争用管理技术:为每个队列行添加一个随机数。当出队时,要求select TOP 1 * from QueueTable where RandomNumberColumn > RAND() order by RandomNumberColumn。这会给你一个从随机位置取得的物品,从而大大减少X锁定造成的阻挡。

+0

我决定使用Berkeley DB(Java)。它是嵌入式的,低级API似乎非常适合队列impl。 – Andrew