如何使用 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 执行分析样式查询。
我在 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 执行分析样式查询。