在cassandra收藏中存储计数器

在cassandra收藏中存储计数器,cassandra,Cassandra,我想存储来自传感器的聚合数据,这是我的cassandra表的模式计划 更新 问题是我知道卡桑德拉不支持收藏中的计数器。这个问题有没有其他的解决方法?感谢您的帮助这里唯一的替代方法是将映射的键移动到表的主键中。正如我所理解的,现在你正试图这样建模: create table counters ( ts timestamp primary key, counters map<text, counter> ); 要选择应该进入映射的所有值,只需执行以下操作 select ts,

我想存储来自传感器的聚合数据,这是我的cassandra表的模式计划

更新


问题是我知道卡桑德拉不支持收藏中的计数器。这个问题有没有其他的解决方法?感谢您的帮助

这里唯一的替代方法是将映射的键移动到表的主键中。正如我所理解的,现在你正试图这样建模:

create table counters (
  ts timestamp primary key,
  counters map<text, counter>
);
要选择应该进入映射的所有值,只需执行以下操作

select ts, key, counter from counters where ts = 'some value';

它将返回单独行中给定ts的每一对密钥/计数器,因此您需要有一个代码将它们合并到映射中…

您的主密钥和群集密钥是什么?@ChrisLohfink更新了问题,thanksIt实际上是可能的,但这是否意味着我必须将每个密钥存储为一行?这是我第一次与cassandra合作,这种类型的模型是否没有使工作负载增加?是的,您需要将每个键存储为单独的行。这是计数器类型的限制-不能将计数器和非计数器值放在同一个表中-所有非计数器值都应在主键中。此外,如果要在需要精度的地方计数,则计数器类型不是您需要的-它们是近似值,实际上我不打算使用cassandra聚合函数。我将聚合度量并在ApacheSpark中计算它。这样,spark将在每个新事件流化时更新表。所以,精度不是我最关心的,性能才是。我知道我不应该在评论中要求更多,但还有什么方法比计数器更精确呢?
create table counters (
  ts timestamp primary key,
  counters map<text, counter>
);
create table counters (
  ts timestamp,
  key text,
  counter counter,
  primary key (ts, key)
);
select ts, key, counter from counters where ts = 'some value';