我有一個Cassandra問題。你知道Cassandra如何更新/增加計數器嗎?如何在Cassandra w/o過期中快速增加計數器
我想使用一個風暴螺栓(CassandraCounterBatchingBolt從github上的storm-contrib回購)寫入cassandra。不過,我不知道如何某些incrementCounterColumn()方法的工作..而且還有與卡桑德拉計數器(來源:http://wiki.apache.org/cassandra/Counters)限制的實施,這使得它們不能用於我的情況恕我直言:
如果寫入意外失敗(超時或失去與協調節點的連接),客戶端將不知道操作是否已執行。重試可能導致CASSANDRA-2495超過計數。
計數器的去除本質上是有限的。例如,如果您發出非常迅速的序列「增加,刪除,增加」有可能會丟失
去除不管怎麼說,這是我的情景:
我比更快的更新相同的計數器更新傳播到其他Cassandra節點。
例:
說我有3個卡桑德拉節點。在每個這些節點中的計數器爲0。
節點1:0,節點2:0,節點3:0的增量來了:5 - >節點1:0,節點2:0,節點3:0
增量開始於節點2 - 仍然需要傳播到節點1和節點3
節點1:0,節點2:5,節點3:0在此期間,另一增量先前增量
被傳播之前到達:3 - >節點1: 0,node2:5,node3:0假設3點開始在比5開始,我們在不同的節點有:
節點1:3,節點2:5,節點3:0
現在,如果3被傳播到其他節點作爲一個增量,而不是作爲新值 (和5相同),然後最終節點都將等於8,這就是我想要的。
如果3重寫5(因爲它有一個更晚的時間戳)這是有問題的 - 不是我想要的。
你知道Cassandra如何處理這些更新/增量嗎?
。注意,寫之前讀仍然容易受到因同樣的問題,從哪個副本節點讀取執行(如果傳播不遠處沿着法定人數依然會失效)
我也在想,也許把我的風暴螺栓放在緩存上,Cassandra可能會解決這個問題,但這是另一個故事。
感謝您的詳細解釋。優秀的鏈接和帖子!是的,爲什麼我問這個問題的原因是上次獲得時間戳的原因。現在,我明白有一個計數器的遞增指令(而不是讀取+寫入)。 '這是真的嗎?'如果我轉移到雲端,延遲將會增加,並且在寫入後避免讀取錯誤的數字,因此我需要在保存到數據庫之前增加累積的時間。我希望計數器增量指令存在。 – Adrian
有一個增量指令,你不必在做一個增量前進行讀取。如果您使用QUORUM一致性級別進行遞增操作並使用QUORUM一致性級別進行讀取,則不應該在計數中看到不一致。 – Theo
我應該補充說的是,在特殊情況下(例如分區和崩潰),當然有可能超過或低於計數。 – Theo