2012-10-08 42 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时间戳,因此添加将始终受到删除的影响。