2016-02-28 63 views
1

使用Cassandra作爲隊列:使用Cassandra作爲隊列

真的那麼糟嗎?

設置:5節點的集羣,所有的操作在仲裁

執行使用DateTieredCompaction應顯著減少墓碑的費用,並讓整個SSTables在一次被丟棄。

  • 我們添加的所有消息隊列使用相同的TTL
  • 我們基於時間(例如1分鐘間隔)分區信息,並跟蹤讀地位。
  • 消耗的消息將被明確刪除。 (只有1個線程提取消息)
  • 某些消息可能在被讀取之前被明確刪除(即我們可能在讀取位置之後有墓碑)。 (即最初使用的TTL是一個上限)gc_grace可能會被設置爲0,因爲仲裁讀取將進行阻塞修復(即,我們可以關閉修復,因爲消息僅駐留在1個羣集(DC)中,並且所有操作法定人數))
  • 消息只能添加/刪除,不允許更新。
  • 在我們的使用案例中,如果墓碑沒有複製它不是什麼大不了的事情,那麼偶爾會多次看到相同的消息。 (我們也可能不會定期運行修復程序,因爲所有操作均在法定人數執行。)

想法?

+2

如果你瞭解它們,就可以避免一些陷阱。看看https://github.com/paradoxical-io/cassieq。 –

+2

有趣的是這與我們的用例幾乎完全相符。 – danomano

+0

請報告任何問題(文檔或其他)devshorts,我有興趣獲得反饋!感謝提到@AdamHolmberg – Jake

回答

1

一般來說,它是一個反模式,這種聯繫洽談大部分墓碑上的影響:http://www.datastax.com/dev/blog/cassandra-anti-patterns-queues-and-queue-like-datasets

我的意見是,儘量避免,如果可能的,但如果你真的瞭解性能的影響,並在你的架構中不是問題,當然你可以這樣做。

如果可能的話,不這樣做的另一個原因是,cassandra數據結構不是爲隊列設計的,它總是看起來醜陋,醜陋!

強烈建議在做出最終決定之前考慮Redis或RabbitMQ。

+0

是的,我知道那篇文章,我認爲它的聲音用於所謂的用例。但我相信在適當的使用情況下/關心它可以很好地完成,對墓碑的罰款開銷很小。我認爲這篇文章很好:https://lostechies.com/ryansvihla/2014/10/20/domain-modeling-around-deletes-or-using-cassandra-as-a-queue-even-when-you-知道,更好的/ – danomano