2014-10-20 66 views
2

有當談到持續可擴展的隊列,包括這一個來自DataStax網站是Cassandra是不是一個好的選擇各地的許多建議:http://www.datastax.com/dev/blog/cassandra-anti-patterns-queues-and-queue-like-datasets基於Cassandra的隊列是一種反模式。什麼是解決方案?

然而,極少數地方提到的替代品。我想我可能需要一個。

具體而言,我的場景是: 有些任務(假設有100多萬個需要在將來某個時候執行)。因此,每個任務都有一個關聯的「runAt」屬性,任務需要在其「runAt」時間段內運行(但允許有小的延遲)。當任務完成時,他們需要從隊列中刪除。與此同時,從現在開始到現在1年之間,任意「runAt」值都會以任意比率添加新任務(假設爲100秒/秒或更多)。

一個可能的實現將利用Cassandra的能力來對一行內的列進行排序並使用讀取/刪除技術的一些變體(即讀取隊列的頂部,執行任務並將其從隊列),這非常類似於所提到的反模式。

那麼最有意義的是什麼?嘗試調整建議的解決方法,以使該特定問題按預期的規模工作?或者完全不同的技術更適合這項工作?

任何幫助/意見,將不勝感激。

回答

1

它是一種反模式的原因是因爲每個刪除都會導致一個邏輯刪除(即壓縮之前數據不會被刪除)。此外,在寬限期後沒有修復的情況下進行分區和隨後的重組可能會導致刪除的數據重新出現(例如「殭屍」)。根據您的數據速率,總體容量,羣集大小,用例等,這可能是您願意做出的折衷。

如果沒有,可能看一些協調工具會更有意義。也許Zookeeper可以在這裏使用。

+0

謝謝,我知道這是一個反模式的原因。看起來雖然是一種相當普遍的情況,所以我希望有一個擱置實施。 – 2014-10-22 12:34:29

+1

這是可行的,但並不容易。免責聲明,我是貢獻者,但這是一個基於Cassandra的隊列,它不使用刪除https://github.com/paradoxical-io/cassieq – devshorts 2016-02-23 03:10:06

相關問題