我有一张Cassandra表格如下:
create table experience.userstats (stream varchar, user varchar, computer varchar, experience varchar, amount int, primary key (experience, stream, user, computer);
我正在使用Apache风暴螺栓从队列喷口在Cassandra中创建这些记录。
我想生成聚合统计信息,并以饼图的形式显示给定流的不同体验的计数器。例如,30%满意,40%混合和30%不满意的体验。
由于我无法在线更新计数器,因此我使用Clock spout(计时器)读取此数据并将计数器生成到新表中。但Cassandra不支持group by子句,因此我必须阅读三次以获得每个体验的计数器如下所示。
select count(*) from experience.userstats where experience='satisfied' and stream='xyz';
select count(*) from experience.userstats where experience='unsatisfied' and stream='xyz';
select count(*) from experience.userstats where experience='mixed' and stream='xyz';
这种方法的问题在于我必须在数据库上执行三个查询才能获得3种类型的经验和经验的计数器,可以在平均时间内修改这些计数器不一致。
有没有办法可以在一个批次中执行上面三个选择语句?或者你能否提出另一种设计方法?
答案 0 :(得分:0)
你可以使用
在
关系运算符 像这样,
SELECT count(*)FROM userstats WHERE经验IN('mixed','notisfied','satisf)AND stream ='xyz';
答案 1 :(得分:0)
执行计数(*)会让您轻松超时。你为什么不使用计数器字段,只是在插入时增加它?这样您只需查询一个值。分布式计数器在2.1及更高版本中得到了改进,它们运行良好。