2012-05-09 43 views
3

我們有一個cassandra(簡單)兩個節點的集羣。cassandra-cli在批處理模式下刪除後立即設置,設置丟失

在從定製的轉儲恢復,我們發現,當我們有像

del column_family['row_1']; 
set column_family['row_1']['column1'] = '123'; 
set column_family['row_1']['column2'] = '456'; 
set column_family['row_1']['column3'] = '789'; 

線......往往是第一列(COLUMN_1)不被設置。

我們使用:

$ cassandra-cli -h cassandra.host.name -k keyspace_name -f dump_file 

我們使用的是Debian主機上卡桑德拉1.0.10。

轉儲總是丟棄然後重新創建密鑰空間,所以當我們執行它時實際上是空的。我們知道,刪除語句實際上並不需要。

我們刪除了它,但我們仍不明白爲什麼會發生這種情況。我想這是由設計中的這種方式引起的,而我們只是錯過了,但我們無法弄清楚什麼是完全錯誤的。

回答

3

我想這裏發生的事情是行墓碑(從行刪除)和一個或多個列寫入的時間戳結束了具有相同的值。 Cassandra-cli遵循對時間戳值使用毫秒的通用慣例,所以當刪除和插入緊接着彼此跟隨時,這是非常可能的。

當插入的列和邏輯刪除表具有相同的時間戳時,邏輯刪除將獲勝。所以你的第一列看起來會消失是有道理的。

在你的情況下,通過用明確的時間戳寫入刪除,然後使用該時間戳加上一個寫入其他列,可以解決問題。這類事情通常不是必需的,但請記住,這些寫入旨在使每個人都可以訪問不同的Cassandra節點,並且用戶仍然可以隨時獲得正確的結果。時間戳是衝突解決機制。