【问题标题】:Cassandra - Reinserting deleted columnCassandra - 重新插入已删除的列
【发布时间】:2012-09-28 15:59:12
【问题描述】:

我只是在我创建的列族上运行了几个简单的测试(插入和删除)。 我观察到,虽然针对行键插入了新列,但最近删除的列没有插入。

例如:

rowkey1 :: name1-val1
name2-val2

删除 name1 后,如果我再次尝试插入它,我仍然会得到

rowkey1 :: name2-val2 并且不会恢复为 name1-val1, name2-val2。

当我尝试通过我的代码插入它时出现问题(使用 Pelops Java 客户端) 以下是我用于插入的代码 sn-p:

            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);

谢谢

【问题讨论】:

  • 该列族有多少个节点,删除后多久您尝试插入新列?
  • 嗨,克里斯,有 2 个节点,我尝试在 2-5 分钟后插入它。两个节点都在同一台机器上运行。顺便说一句,这就是解决问题的原因。:我将代码更改为List<Column> colList = new ArrayList<Column>(); for (...) { colList.add(mutator.newColumn(keyname, keyval)); } mutator.writeColumns(COLFAMILY, userId, colList);

标签: cassandra pelops


【解决方案1】:

这很可能是时间戳问题。

如果写入冲突,cassandra 使用时间戳来决定获胜者。在上面的代码中,您使用毫秒设置时间戳,但按照惯例,cassandra 使用micro seconds 中的时间戳。

时间戳可以是任何你喜欢的,但自 1970 年以来的微秒是一个惯例。

所以您的删除可能使用微秒的时间戳,比您添加的毫秒时间戳>,因此添加将始终被删除所掩盖。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多