如何使用 cassandradb 计数器表进行查询
Posted
技术标签:
【中文标题】如何使用 cassandradb 计数器表进行查询【英文标题】:how to do a query with cassandradb counter table 【发布时间】:2015-01-17 11:08:14 【问题描述】:我在 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】:对此的简短回答是,您不能对 Cassandra 中的计数器列使用条件进行查询。
这背后的原因是所有 Cassandra 查询都需要围绕该特定表的主键进行建模。计数器列不允许作为表的主键的一部分(它们的变化值会导致磁盘上数据的不断重组)。计数器列更多地用于跟踪已知数据的状态,例如照片被投票的次数。只要我们知道我们对哪张照片感兴趣,就可以很快回忆起这一点。要实际按票数对照片进行排序,您需要使用 spark 或 Hadoop 执行分析式查询。
【讨论】:
以上是关于如何使用 cassandradb 计数器表进行查询的主要内容,如果未能解决你的问题,请参考以下文章