2011-11-22 65 views
2

我執行批量更新,修改少數列族中的少數幾行。在TimedOutException的情況下,一些數據可能會被修改,但可能不是整個集合....Cassandra TimedOutException和批量更新的數據修改

爲了實現補償事務,我需要知道什麼數據(行)被修改 - 有沒有辦法找到這個出來嗎?例外是否包含這些信息?

感謝, 馬切伊

回答

3

創建,可以擴展出的手段採取一些折衷的系統 - ,其中之一是促進你的應用程序「冪等」操作。

這意味着你要麼:

  • 假設數據的某處書面和該節點將 最終成爲一致

  • 火寫的全部內容再次,也許睡覺給定的時間量或
    處於較低限制的一致性水平

這個方法的一個很好的描述可以在Pat Helland的「Building on Quicksand」論文的第6部分中找到:http://arxiv.org/pdf/0909.1788

+0

我無法從cassandra獲得哪些數據部分被修改的信息?這在異常本身中也不可用? –

+2

否 - 在分佈式系統中,回覆您的客戶端的節點可能不擁有數據,並且會將請求「協調」到適當的所有者,因此將無法查看失敗的狀態,或者消息是否只是由於負載而拋棄。 – zznate

+0

只是好奇,你不能跟蹤更新的列中的時間戳,然後當你去嘗試重新寫你比較時間戳,看看寫了什麼或什麼不寫。如果時間戳比您預期的要少,那麼該項目不會被寫入。如果時間戳是相同的,那麼它被寫入,所以什麼也不做。它更大,然後另一個過程寫了一些事後,所以可能也沒有做任何事情。 – AlexGad