如何在cassandra上的单个批处理中执行多个查询

zengzsys  于 2021-06-21  发布在  Storm
关注(0)|答案(2)|浏览(309)

我有一张Cassandra的table如下: create table experience.userstats (stream varchar, user varchar, computer varchar, experience varchar, amount int, primary key (experience, stream, user, computer); 我使用ApacheStormBolts在cassandra中从一个队列喷口创建这些记录。
我希望生成聚合统计信息,并将给定流的不同体验的计数器显示为饼图。例如,30%满意,40%混合和30%不满意的体验。
因为我不能在线更新计数器,所以我使用一个时钟喷口(计时器)来读取这些数据并将计数器生成到一个新表中。但是cassandra不支持GROUPBY子句,因此我必须读三遍才能得到下面每个体验的计数器。

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';

这种方法的问题是,我必须在数据库上执行三个查询,以获取这三种类型的体验的计数器,同时可以修改体验,使这些计数器不一致。
有没有一种方法可以在一个批处理中执行以上三个select语句?或者你能建议一个替代的设计方法吗?

trnvg8h3

trnvg8h31#

执行count(*)将使您很容易超时。为什么不使用counter字段并在插入时增加它呢?这样您只需查询一个值。分布式计数器在2.1和更高版本中得到了改进,它们工作得很好。

j0pj023g

j0pj023g2#

你可以用
在里面
像这样的关系运算符,
从userstats中选择count(*),其中experience in('mixed'、'unsatisfied'、'satisfied')和stream='xyz';

相关问题