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

how to do a query with cassandradb counter table

我在 Cassandradb 中有一个 table,如下所述:

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 方式执行此操作?

对此的简短回答是,您不能在 Cassandra 的计数器列上使用条件进行查询。

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