2012-12-13 62 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