【问题标题】:CQL 3 Cassandra 1.2 counter: how to insert primary key?CQL 3 Cassandra 1.2 计数器:如何插入主键?
【发布时间】:2013-07-16 16:22:12
【问题描述】:

我想像这样在 CQL3 中使用 Cassandra 计数器

创建表count1(id int PRIMARY KEY, c1 counter);

我知道为了更新计数器,我需要执行以下形式:

更新 count1 设置 c1 = c1+1 where ..

但在此之前我需要在我的key (id); 中插入一个值,但我得到:

cqlsh:test2> insert into count1 (id) values (4);
Bad Request: INSERT statement are not allowed on counter tables, use UPDATE instead

什么给了?

【问题讨论】:

    标签: cassandra counter


    【解决方案1】:

    Cassandra 没有主键存在与否的概念 - 它只是具有特定主键的单元格。

    因此,对于普通列族(即非计数器),您可以 insertupdate(它们在语义上相同)无论之前是否使用该主键插入了任何内容。

    对于计数器表,CQL 要求您使用update 而不是insert,以明确它是递增而不是设置值。您不能在 Cassandra 中设置计数器值,只能设置 inc/dec。如果之前没有计数器,则假定其值为 0。因此您可以运行

    update count1 set c1 = c1 + 1 where id = 2;
    

    计数器的值为 1:

    select * from count1;
    
     id | c1
    ----+----
      2 |  1
    

    【讨论】:

    • 谢谢理查德,我明白了,所以我必须使用任意 id 更新计数器表才能使其正常工作。有点奇怪,但很管用 - 谢谢
    • 这是您用来检索它的计数器的 ID。您可以在列族中拥有任意数量的列。
    猜你喜欢
    • 1970-01-01
    • 2014-07-02
    • 2013-07-16
    • 2012-02-26
    • 2013-05-22
    • 1970-01-01
    • 2012-02-07
    • 2013-09-04
    • 2019-03-04
    相关资源
    最近更新 更多