如何在Cassandra

时间:2016-06-17 00:34:31

标签: cassandra apache-storm cassandra-2.1

我有一张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种类型的经验和经验的计数器,可以在平均时间内修改这些计数器不一致。

有没有办法可以在一个批次中执行上面三个选择语句?或者你能否提出另一种设计方法?

2 个答案:

答案 0 :(得分:0)

你可以使用

  

关系运算符 像这样,

SELECT count(*)FROM userstats WHERE经验IN('mixed','notisfied','satisf)AND stream ='xyz';

答案 1 :(得分:0)

执行计数(*)会让您轻松超时。你为什么不使用计数器字段,只是在插入时增加它?这样您只需查询一个值。分布式计数器在2.1及更高版本中得到了改进,它们运行良好。