如何使用cassandradb计数器表进行查询

时间:2015-01-17 11:08:14

标签: cassandra cassandra-2.0 cql3

我在Cassandradb有一张桌子,如下所述:

CREATE TABLE remaining (owner varchar,buddy varchar,remain counter,primary key(owner,buddy));

通常我在REMAIN字段上执行一些inc / dec操作,使用如下的cql:

update remaining set remain=remain + 1 where owner='userA' and buddy='userB';
update remaining set remain=remain + 1 where owner='userA' and buddy='userC';
....

现在我需要找出userA的所有好友,当我使用时,它的REMAIN字段大于1.

select buddy,remain from remaining where owner='userA' and remain > 0;

给了我一个错误:

No indexed columns present in by-columns clause with Equal operator

如何以cassandradb方式执行此操作?

1 个答案:

答案 0 :(得分:0)

对此的简短回答是,您无法对Cassandra中的计数器列上的条件进行查询。

这背后的原因是所有Cassandra查询都需要围绕该特定表的主键建模。计数器列不允许作为表的主键的一部分(它们的更改值将导致磁盘上数据的不断重组)。计数器列更多地用于跟踪已知数据的状态,例如照片被投票的次数。只要我们知道我们感兴趣的是哪张照片,就可以快速回忆起来。要按照投票数量对照片进行实际排序,您需要使用spark或Hadoop执行分析样式查询。