2012-10-08 41 views
2

我只是在創建的列族上運行了一些簡單的測試(插入和刪除)。 我觀察到雖然新列正在插入一個行鍵,但最近刪除的一列未插入。Cassandra - 重新插入刪除的列

例如:

rowkey1 ::名1-VAL1
                               名2-VAL2

刪除名稱1,如果我嘗試插入後它再次我仍然得到

rowkey1 :: name2-val2並且不返回到name1-val1,name2-val2。

當我通過我的代碼(使用貝洛布思Java客戶端),將其插入時出現問題 以下是我使用的插入代碼片段:

  Mutator mutator = Pelops.createMutator("poolname"); 
      Column column = new Column(bufcolname); 
      column.setValue(bufcolval); 
      column.setTimestamp(new Date().getTime()); 
      mutator.writeColumn("MyColumnFamily",userId, column); 
      mutator.execute(ConsistencyLevel.ONE); 

感謝

+0

此列族中有多少個節點,以及刪除後多久嘗試插入新列? –

+0

嗨克里斯,有2個節點,我試圖插入它說2-5分鐘後。兩個節點都在同一臺機器上運行。順便說一句,這是什麼修復問題:我改變了我的代碼爲'List colList = new ArrayList (); \t \t \t爲(...){ \t \t \t \t \t \t \t \t colList.add(mutator.newColumn(鍵名稱,KEYVAL)); \t \t \t \t \t \t \t} \t \t \t mutator.writeColumns(COLFAMILY,用戶id,colList);' – user1668102

回答

5

這很可能是時間戳問題。

如果寫入衝突,cassandra使用時間戳來決定獲勝者。在上面的代碼中,您使用毫秒設置時間戳,但按照慣例,cassandra使用micro seconds中的時間戳。

時間戳可以是任何你喜歡的,但自1970年以來的微秒是一個約定。

因此,您的刪除可能使用了微秒的時間戳,該時間戳超過您添加的ms時間戳,因此添加將始終受到刪除的影響。