2016-01-25 104 views
0

我有一個關於卡桑德拉分批分離一個問題:卡桑德拉分批分離保證

我們的集羣由單一的數據中心,3個複製因子,讀,寫LOCAL_QUORUM的。 我們必須提供類似'after'觸發器的新聞饋送,以通知客戶有關數據庫中數據的CRUD事件。 我們考慮過執行實際的操作,並在另一個表上(也在另一個分區中)在一個批次內插入一個事件。異步地,某些進程會從事件表中讀取事件並通過MQ發送它們。

因爲我們正在寫入不同的分區,並且操作順序不一定保持在批處理操作中;我們的事件是否有機會寫入,並且我們的過程在我們的實際數據持續之前將其讀取?

如果我們的批次最終失敗,情況會不會發生同樣的情況?

問候, 亞歷

回答

0

從ACID屬性,卡桑德拉可以提供ACD。因此,不要指望經典意義上的隔離。

批處理記錄將爲您提供原子性。所以它可以確保批量中的全部或全部記錄都不會寫入。但是,因爲它不能保證隔離,所以最終可能會保留一些記錄,而其他記錄則不會(例如寫入隊列表,但不寫入主表)。

卡桑德拉docs解釋它是如何工作的:

爲了實現原子性,卡桑德拉第一寫入序列化批量消耗序列化批量爲BLOB數據batchlog系統表。當批處理中的行成功寫入並保留(或暗示)時,批處理日誌數據將被刪除。原子性有一個性能損失。

最後,使用卡桑德拉表作爲MQ被認爲是anti-pattern

+0

非常感謝! – AQ1