卡桑德拉的计数不同

时间:2017-04-03 11:51:24

标签: cassandra count distinct

我在“cassandra”中有一个表chat_matches。并希望将所有消息from_id计数到具有行数的不同to_id(按to_id分组)。

class BaseClass{
  void templateMethod(){
     methodImplementation();
     if(this.base.getType() != typeof(BaseClass)) this.base.methodImplementation();
  }
  void abstract methodImplementation();
}
class Derived1 : BaseClass{
  void override methodImplementation(){
     .. do things ..
  }
}
class Derived2 : Derived1{
  void override methodImplementation(){
     .. do more things ..
  }
}

1 个答案:

答案 0 :(得分:0)

在cassandra中count(*)是一项非常昂贵的操作,需要扫描所有节点的所有行,只是为了给你计数,并且可以生成超时异常。

所以不要使用count(*)维护一个像下面那样的计数器表:

CREATE TABLE message_counter (
    from_id bigint,
    to_id bigint,
    count counter,
    primary key((from_id, to_id ))
);

当出现新消息时,只需将count的值递增1。

 UPDATE message_counter SET count = count + 1 WHERE from_id = 1 AND to_id = 2;

现在,您可以非常有效地从by_id到to_id选择消息计数组

SELECT * FROM message_counter WHERE from_id = 1 AND to_id = 2;