【问题标题】:How to re-insert record with counter column after delete it in Cassandra?在 Cassandra 中删除后如何使用计数器列重新插入记录?
【发布时间】:2015-08-06 03:46:19
【问题描述】:

我在 Cassandra 中创建了一个带有计数器列的表,就像:

create table test_count(
    pk int,
    count counter,
    primary key (pk)
);

然后我更新一些记录,例如:

update test_count set count = count + 1 where pk = 1;

然后我想将count重置为0,但是cql中没有reset命令,所以我删除了记录:

delete from test_count where pk = 1;

然后我重新执行更新CQL,但是当我select * from test_count时,没有pk = 1的记录,是不是Cassandra的bug?当您删除带有计数器列的记录时,它会永远消失吗?如何将计数列重置为 0?如何重新插入带有计数器列的记录?

【问题讨论】:

  • 从 pk = 1 的 test_count 中删除;此处的此查询意味着您要删除 pk=1 的所有记录。所以这就是为什么你的记录都被删除了。如果你想将你的计数重置为 0,你可以尝试 set count = 0。
  • 谢谢,但是在cassandra中,你只能写set count = count +/- *,set count = 0是不允许的,而且cassandra不允许你插入带有计数器列的记录,你只是可以更新,所以我使用更新而不是删除后插入。
  • 在我运行Delete cql之前,如果不存在,更新将插入记录,但在我运行Delete之后情况发生了变化
  • 一个选项是您可以减去计数,例如,如果从选择中您收到计数为 5,您执行类似这样的操作 Update test_count Set count = count-5 where pk=1;

标签: cassandra counter


【解决方案1】:
  1. 您可以先查询计数器的当前值,然后发出更新以减去该数量。

  2. 您可以删除计数器,然后使用不同的行键启动新的计数器。您将不再尝试使用原始计数器。使用这种方法,您可能希望按天或按周对计数器进行分区,以便在新的一天开始时,您可以从一组新的归零计数器开始。

【讨论】:

  • 谢谢,但是我有很多记录要重置,全部查询不好,我只想重新计算同一天的计数,所以必须有相同的行键.. .似乎我应该放弃使用计数器列。
猜你喜欢
  • 2017-03-24
  • 2012-11-22
  • 2012-09-28
  • 2016-10-07
  • 2020-05-20
  • 2013-07-04
  • 2018-10-03
  • 2015-08-27
  • 1970-01-01
相关资源
最近更新 更多